在ForeignKeys上过滤Django模型,彼此一致

时间:2014-10-06 03:23:59

标签: python django django-models

我正在尝试从模型中获取记录,其关联的外键(related_name=answers)在所有相关的(一致的)中只有一个答案(answer = models.CharField())。我可以使用Count(..., distinct=True)得到那些有不同答案的模型,如下所示:

# get models with disagreeing answers
objs = (model.objects
        .annotate(ans_values=Count('answers__answer', distinct=True))
        .filter(ans_values__gt=1))

我有一个看似工作但非常黑客的解决方案,以便在和谐中获得答案:

# objects with agreeing answers
key = my_answer
objs = (model.objects
        .filter(answers__isnull=False)
        .annotate(ans_max=Max('answers__answer'), 
                  ans_min=Min('answers__answer'))
        .filter(ans_max=key, ans_min=key))

在文字字段上使用MaxMin感觉很脏,但我不知道The One Way™。

1 个答案:

答案 0 :(得分:0)

我认为这对你有用。它使用Q对象。

objs = model.objects.filter(
    answers__isnull=False,
    answers__answer=my_answer,
).exclude(
    ~Q(answers__answer=my_answer)
).distinct()