Hi Ram,

I don't have a complete solution for you but I suggest you take a look at 
the
django.db.models.fields.related.ForeignObject class.

If I'm not mistaken it should allow you to define multi-column relationships
on both your Article and PublisherMediumBilling models and refer to them 
using
the `select_related()` and `prefetch_related()``API while the later uses 
Python
to perform in-memory JOINs.

class Article(models.Model):
    publisher = ForeignKey(Publisher, related_name='articles')
    medium = ForeignKey(Medium)
    billing = ForeignObject(
        'PublisherMediumBilling', from_fields=['publisher', 'medium'], 
to_fields=['publisher', 'medium']
    )

publisher.articles.select_related('billing')

Cheers,
Simon

Le samedi 18 juin 2016 07:09:03 UTC-4, Ram Jayaraman a écrit :
>
> I apologize if this is an old question, I did search SO/google for a good 
> few hours.
>
> I have the following models.
>
> Publisher()
>   name = CharField()
>
> Medium()
>   name = CharField()
>
> Article()
>   publisher = ForeignKey(Publisher, related_name="articles")
>   medium = ForeignKey(Medium, related_name="articles")
>   text = TextField()
>
> PublisherMediumBilling()
>   publisher = ForeignKey(Publisher()
>   medium = ForeignKey(Article)
>   lots_of_other_columns
>  ...
>   class Meta:
>       unique_together = ['publisher', 'medium']
>
>
>
> I am looking to query all Article from a given publisher, and also fetch 
> the related PublisherMediumBilling joining on the columns Publisher and 
> Medium, 
> Prefetch() object doesn't seem to quite work for this case.
>
> I can of course filter-query for all PublisherMediumBilling and cache it 
> and do a in-memory Python JOIN. Is there a way to do through one of the ORM 
> Apis ?
>

-- 
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/7d2176cb-8cba-4087-bf22-5529430c0b9f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to