2010-06-17 5 views
0

Je me bouscule pour comprendre les relations dans ORM.Relations complexes avec le filtrage

Je souhaite obtenir un ensemble de requêtes CostItem distinct lié à un événement particulier.

Normalement, je filtrerais CostFixedList pour l'événement particulier qui m'intéresse et obtenir un ID Cost_Rate. De là, je pourrais obtenir l'identifiant CostItem.

Je pourrais le faire facilement en SQL, mais je ne comprends pas comment démarrer avec ORM. Est-ce que quelqu'un peut-il me montrer la bonne direction?

class Event(models.Model): 
    event_type = models.ForeignKey(EventType) 
    retailer = models.ForeignKey(Retailer) 
    .... 

class CostItem(models.Model): 
    name = models.CharField("Name", max_length=50, unique=True) 
    cost_type = models.ForeignKey(CostType, verbose_name="Type") 
    active = models.BooleanField("Active", default=True) 

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): 
    event = models.ForeignKey(Event) 
    cost_rate = models.ForeignKey(CostRate) 
    units = models.IntegerField() 
    appointment = models.ForeignKey(Appointment, null=True, blank=True) 
+0

double possible (http: //stackoverflow.com/questions/3060637/reverse-relationships-and-distinct-querysets) –

+0

Oui. c'est un doublon. Ça n'avait pas l'air d'avoir traversé. Pardon. – alj

Répondre

1

Je pense que cela devrait le faire (où myevent est l'événement pour lequel vous souhaitez obtenir le CostItem queryset): [. Relations inverse et QuerySets distincts]

qs = CostItem.objects.filter(costrate__costfixedlist__event=myevent) 
+0

Merci pour cela. Ça marche! – alj