mysql - 在 Django 中执行 WHERE 'field' IN (list) 查询?

标签 mysql django

每个问题都有很多答案。我有一个投票表,其中包含所有问题和答案的赞成/反对票。我想执行如下查询:

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/

相关文章:

django - 是否有让我设置上下文变量的Django模板标签?

python - Django - get_or_create 不工作

mysql - MySQL - 简单的订单表现不佳

php - 我的评论系统不会将内容添加到我的数据库中

MySql 在使用带有模式的函数 WEEK() 时返回错误

python - django Translation.activate() 接受什么语言格式?

python - 表 polls_choice 没有名为 poll_id 的列

mysql - 异常的 SQL 查询

mysql - MySQL 中一个 FOREIGN 列的 PRIMARY 和 INDEX 键

django-cms:当前页面可用的属性和方法