有一个模型Location
,可以有多个Ticket
对象(使用ForeignKey
)。
Ticket
模型的price
字段是DecimalField
。
现在我有Ticket
个对象的QuerySet,我想获取Location
个对象的QuerySet并注释min_price
的值,该值是所有Ticket
对象的最低价格FILTERED QuerySet。
例如:
tickets = Ticket.objects.filter(something)
locations = Location.objects.all().annotate(min_price=<minimal price from tickets having this location>)
我尝试过的事情:
locations_annotated = Location.objects.all().annotate(
min_price=Min('tickets__min_price', filter=tickets))
这不起作用。当我尝试从locations_annotated
获取第一个元素时,调试器将返回:
TypeError: can only concatenate list (not "tuple") to list
你知道该怎么办吗?
答案 0 :(得分:0)
我认为注释使用不正确。请尝试
locations_annotated = Location.objects.annotate(
min_price=Min('tickets__min_price', filter=tickets)
答案 1 :(得分:0)
基本上,您应该将django.db.models.query_utls.Q
对象作为filter
参数传递,而不是将经过过滤的查询集传递到Min
中:
locations_annotated = Location.objects.all().annotate(
min_price=Min('ticket__price', filter=Q(something)))
请注意,something
内的所有过滤器均应加ticket__
前缀