Фильтр объекта, имеющего несколько связанных объектов в Django
Допустим, у меня есть две модели, которые имеют отношения "один ко многим", как показано в коде ниже. Я хотел бы получить только те объекты заказов, которые имеют более одного объекта отгрузки.
Единственный способ, о котором я могу думать, это получить его через понимание списка [order for order in Order.objects.all() if order.shipments.count() > 1] но это кажется слишком неэффективным.
Есть ли лучший способ выполнить этот запрос в Django?
class Order(models.Model):
name = models.CharField(max_length=20)
store = models.CharField(max_length=20)
class Shipment(models.Model):
order = models.ForeignKey(Order, related_name='shipments')
это должно сделать:
вы можете получить доступ к грузам через связанное имя:
Order.objects.annotate(num_shipments=Count('shipments')).filter(num_shipments__gt=1)