如何只获取中间表中的所有记录一次?

时间:2016-02-11 14:12:19

标签: python django django-models

这可能是一个复杂的问题,但我会试着解释一下。

我有以下型号:

class Event(models.Model):
    name = models.CharField(max_length=128)

class Order(models.Model):
    requester = models.CharField(max_length=128)
    taker = models.CharField(max_length=128)
    email = models. EmailField()
    phone = models.CharField(max_length=13)

class Picture(models.Model):
    event = models.ForeignKey(Event)
    image = models.ImageField(upload_to='media')
    show_name = models.CharField(max_length=128, blank=True, null=True)
    file_name = models.CharField(max_length=128, blank=True, null=True)

class OrderItem(models.Model):
    order = models.ForeignKey(Order)
    picture = models.ForeignKey(Picture)
    amount = models.PositiveSmallIntegerField()

我需要获得属于一个事件的所有订单,但只需要一次。这可以通过图片来实现。如果图片在订单中,我需要事件。

示例:

Event 1:
Pic 1, Pic 2

Event 2:
Pic 3, Pic 4

Order 1:
Pic 1, Pic 2, Pic 3, Pic 4

Order 2:
Pic 2

Order 3:
Pic 1

我需要什么:

Event 1 has 3 Orders (Order 1, Order 2 and Order 3)
Event 2 has 1 Order (Order 1)

即使订单包含来自活动的多张图片,我只需要计算一次。

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

它与任何其他查询没有区别,只需使用双下划线来更改关系:

event = Event.objects.get(id=1)
orders = Order.objects.filter(orderitem__picture__event=event)

修改

计算您的订单:

order_count = orders.distinct().count()