反向关系和不同的查询集

时间:2010-06-17 10:02:16

标签: django django-models

我有以下模型,我正在尝试研究如何做落后关系。

我想要一个独特的CostRate查询集,显示与特定SalesEvent关联的开销。 CostFixedList包含在不同日期发生的所有销售。

所以我会过滤特定SalesEvent的CostFixedList,创建一个[不同]成本率列表,然后将其与CostRate模型进行匹配。

我可以在SQL中轻松完成这项工作,但无法理解如何在ORM中执行此操作[甚至开始]。

class SalesEvent(models.Model):
    event_type = models.ForeignKey(EventType, verbose_name="Event Type")
    retailer = models.ForeignKey(Retailer, verbose_name="Retailer")
    ....

class CostRate(models.Model):
    cost_item = models.ForeignKey(CostItem, verbose_name="Item")
    valid_from = models.DateField("From")
    valid_till = models.DateField("Till")
    unit_amount = models.DecimalField("Price Per Unit", max_digits=5, decimal_places=2)

class CostFixedList(models.Model):
    sales_event = models.ForeignKey(SalesEvent)
    cost_rate = models.ForeignKey(CostRate)
    units = models.IntegerField()
    appointment = models.ForeignKey(Appointment, null=True, blank=True)

1 个答案:

答案 0 :(得分:3)

在我看来,就好像SalesEvent和CostRate之间存在隐含的ManyToMany关系,并将直通表作为CostFixedList。

因此,如果您明确说明,您可以直接通过该关系进行查询,而无需做任何聪明的事情。只需将其添加到CostRate模型(无需更改架构):

sales_events = models.ManyToManyField(SalesEvent, through='CostFixedList')

现在你可以做到:

my_sales_event.costrates.all()