Django:防止重复数据

时间:2017-09-23 14:28:16

标签: python django

这就是我的模型的样子,

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(),但它不起作用。

即使它有多个答案,我只想要一个问题出现一次。如果有多个答案,我怎样才能防止结果中的问题重复?这样做的最佳方式是什么?

请帮助。谢谢:)

2 个答案:

答案 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())