每个问题都有很多答案。我有一个投票表,其中包含所有问题和答案的赞成/反对票。我想执行如下查询:
Select * from vote WHERE username="some username" AND (QID="question" OR (AID IN (SELECT AID from Answers WHERE QID="question")))
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)
附注请注意,QID 和 AID 是外键。因此他们只会采用问题/答案模型的实例。
最佳答案
你可以做到,
from django.db.models import Q
Vote.objects.filter(username='some_username').filter(
Q(QID=question_id) |
Q(AID__QID=question_id
)
注意:完全同意@schillingt的回答。
或者,如果您想获取问题的所有 Vote
对象,那么您可以调用反向关系,例如,
question = Question.objects.get(QID='some_id')
question.vote_set.all()
关于mysql - 在 Django 中执行 WHERE 'field' IN (list) 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997878/