Hi Tom,

That was approximately what I was planning to do, I shall do some 
experimenting to see if I can do any more.  I was just wondering if there 
was a clever feature for this sort of thing, as ORMs seem pretty magic 
already!

Thanks,
Rich

On Thursday, 30 July 2015 17:15:40 UTC+1, Tom Evans wrote:
>
> On Thu, Jul 30, 2015 at 4:08 PM, Rich Lewis <[email protected] 
> <javascript:>> wrote: 
> > Dear All, 
> > 
> > I'm new to the Django ORM, and quite new to ORMs in general.  I have two 
> > models (lets call them A and B) between which I have an interesting 
> mapping. 
> > There are precisely 2 B instances associated with each A instance.  Each 
> A 
> > instance can have many B instances.  The order of Bs are important for 
> As. 
> > 
> > I want to do something like this: 
> > 
> > class A(models.Model): 
> >   b_1 = models.ForeignKey(B) 
> >   b_2 = models.ForeignKey(B) 
>
> This would fail here, when you have more than one foreign key to the 
> same model, you must supply a related_name argument on one of them, 
> which is used for the inverse relation on the related object. Which 
> leads us in to... 
>
> > 
> > class B(models.Model): 
> >   pass 
> > 
> > Such that i can do: 
> > 
> >>>> b1, b2, b3 = B(), B(), B() 
> >>>> a1, a2 = A(b_1=b1, b_2=b2), A(b_1=b2, b_2=b3) 
> >>>> b2.as 
> > [<A ... >, <A ... >] #(order doesn't matter) 
>
> Typically, B instances would have an attribute named 'a_set' (the 
> lower case model name of the model it is related to, with "_set" 
> appended). When you have multiple relationships with the same model, 
> as I mentioned you must supply your own related_name arguments. In 
> which case, with the models you mentioned, you could then do something 
> like this: 
>
> >>> b2.a1_set.all() | b2.a2_set.all() 
> > [<A ..>, <A ..>] 
>
> > 
> > I expect I could eventually do something a bit hacky that would work, 
> but 
> > what would be the best way to handle this? 
>
> I would say the above is the hacky way. You could have the same B 
> assigned to b_1 and b_2 and would have duplicates in the set, and no 
> way to specify DB constraints to limit it. 
>
> Given that you anticipate being able to retrieve all the A's for a 
> particular B, regardless of how they are related, I would model it as 
> a M2M with a through table holding any additional information about 
> the relationship, using the through table to add DB level constraints. 
>
> Cheers 
>
> Tom 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/daa601f5-12d5-44fe-8c58-f2f052629261%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to