2010-06-17 4 views
0

J'ai les modèles suivants et j'essaie de déterminer comment faire des relations en arrière.Relations inverses et ensembles de requêtes distincts

Je veux un ensemble de requêtes costRate distinct montrant quelles costrates sont associées à un SalesEvent particulier. Le CostFixedList a toutes les ventes qui ont eu lieu sur les différents jours. Donc, je filtrerais le CostFixedList pour un SalesEvent particulier, créerais une liste des coûts [distincts] dont il dispose, puis je le ferais correspondre au modèle CostRate.

Je pourrais le faire facilement en SQL, mais je n'arrive pas à comprendre comment le faire [ou même démarrer] dans 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) 

Répondre

3

Il me semble que si vous avez une relation implicite entre ManyToMany SalesEvent et CostRate, avec la table à travers comme CostFixedList. Donc, si vous le faites explicitement, vous pouvez interroger directement via cette relation sans avoir à faire quoi que ce soit d'intelligent. Il suffit d'ajouter ceci à votre modèle CostRate (pas de changement de schéma requis):

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

Maintenant, vous pouvez faire:

my_sales_event.costrates.all() 
Questions connexes