我正在尝试从模型中获取记录,其关联的外键(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))
在文字字段上使用Max
和Min
感觉很脏,但我不知道The One Way™。
答案 0 :(得分:0)
我认为这对你有用。它使用Q对象。
objs = model.objects.filter(
answers__isnull=False,
answers__answer=my_answer,
).exclude(
~Q(answers__answer=my_answer)
).distinct()