这就是我的模型的样子,
class Question(models.Model):
....
&安培;另一个
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
....
我正在尝试过滤那些有答案的问题,我尝试了最简单的方法,即
result = Question.objects.order_by('-answer')[:10]
如果他们有超过1个我不想要的答案,它应该在结果中重复这个问题。我尝试了distinct(),但它不起作用。
即使它有多个答案,我只想要一个问题出现一次。如果有多个答案,我怎样才能防止结果中的问题重复?这样做的最佳方式是什么?
请帮助。谢谢:)
答案 0 :(得分:0)
试试这个,我不知道这是否适用于所有数据库
Question.objects.filter(answer__isnull=False).order_by('-answer').distinct('id')[:10]
<强>更新强>
要实现您的需求,一种方法是将字段 last_answer_time 添加到问题模型中,如下所示:
class Question(models.Model):
content = models.CharField(max_length=100)
last_answer_time = models.DateTimeField(null=True)
并覆盖答案模型的保存方法,如下所示
class Answer(models.Model):
question = models.ForeignKey(Question)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
self.question.last_answer_time = timezone.now()
self.question.save()
return super(Answer, self).save()
每次创建答案时,这将更新问题的last_answer_time字段。现在您可以像这样查询:
Question.objects.filter(last_answer_time__isnull=False).order_by('-last_answer_time')
答案 1 :(得分:0)
你没有提供你的整个模型,所以我做了一些假设 - 比如你的主键是id,但你可以在sqlite中尝试这样的东西:
Questions.objects.filter(id__in=Answers.objects.values('question').distinct())