Zu jeder Frage gibt es viele Antworten. Ich habe eine Tabelle Vote, die die Upvote/Downvotes zu allen Fragen und Antworten enthält. Ich möchte eine Abfrage so etwas wie ausführen:Führen Sie WHERE "Feld" IN (Liste) Abfrage in Django?
Select * from Abstimmung WHERE username = "some username" AND (QID = "Frage" OR (AID IN (SELECT AID von Antworten WHERE QID = "Frage")))
class Question(models.Model):
QID = models.CharField(default="",max_length=5, primary_key=True)
title = models.CharField(max_length=30, default="")
description = models.CharField(max_length=1055, default="")
date = models.DateTimeField(default=datetime.now, blank=True)
username = models.CharField(max_length=30, default="")
votes = models.IntegerField(default=0)
approved = models.BooleanField(default=False)
def __str__(self):
return self.title
class Answer(models.Model):
AID = models.CharField(max_length=5, default="", primary_key=True)
QID = models.ForeignKey(Question,on_delete=None)
description = models.CharField(max_length=1055, default="")
date = models.DateTimeField(default=datetime.now, blank=True)
username = models.CharField(max_length=30, default="")
votes = models.IntegerField(default=0)
approved = models.BooleanField(default=False)
def __str__(self):
return self.AID
class Vote(models.Model):
username = models.ForeignKey(User,on_delete=None)
QID = models.ForeignKey(Question,on_delete=None, null=True, blank=True)
AID = models.ForeignKey(Answer,on_delete=None, null=True, blank=True)
vote = models.BooleanField(default=True)
def __str__(self):
if self.QID is not None:
return self.QID.QID+'_'+self.username.username+'_'+str(self.vote)
else:
return self.AID.AID+'_'+self.username.username+'_'+str(self.vote)
PS Bitte beachten Sie, dass QID und AID Fremdschlüssel sind. Sie nehmen also nur das Frage/Antwort-Modell.
Welche Bedeutung hat dieser Teil? '.values_list ('AID', flach = True)' –
values_list() gibt eine Liste von Feldwerten von Objekten im Abfrage-Set zurück. – zaidfazil