2010-06-17 3 views
0

У меня есть следующие модели, и я пытаюсь понять, как делать обратные отношения.Обратные отношения и различные запросы

Я хочу, чтобы отдельный запрос запроса CostRate показывал, какие затраты связаны с определенным SalesEvent. CostFixedList имеет все продажи, которые произошли в разные дни.

Таким образом, я бы отфильтровал CostFixedList для определенного SalesEvent, создав список [отдельных] расходов, которые он имеет, а затем сопоставим с моделью 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) 

ответ

3

Она смотрит на меня, как будто у вас есть подразумеваемый ManyToMany отношения между SalesEvent и CostRate, с помощью таблицы, как CostFixedList.

Итак, если вы сделаете это явным, вы можете напрямую запросить эту связь, не делая ничего умного. Просто добавьте это к вашей модели CostRate (не требуется никаких изменений схемы):

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

Теперь вы можете сделать:

my_sales_event.costrates.all() 
Смежные вопросы