On Fri, 2007-10-19 at 15:04 -0700, Dr Stitch wrote:
> Greeting all!
>
> CAVEAT: I'm a Django newbie. I've spent about 3 hours searching,
> reading, hazing over all the documentation and tutorials and it's
> quite likely I have missed it or I'm way too new to Django to
> understand the simplicity of the solution for the problem I'm
> presenting. So, feel free to "RTFURL" (provided you provide the
> URL :) Okay, enough said.
>
> The models.py from my app ("publications") is included at the end. My
> end goal is to get the following: 'published.title,
> journal_names.name, journal_impact_factor.impact_factor'.
>
> In standard SQL land, it would be something like:
>
> SELECT published.title, journal_names.name,
> journal_impact_factor.impact_factor
> FROM published, journal_names, journal_impact_factor
> WHERE
> published.journal_names_id=journal_names.id
> AND
> published.year=journal_impact_factor.year
> AND
> journal_impact_factor.journal_names_id=journal_names.id;
>
> Now, I can get publication title and journal name via:
> latest_pubs_list = published.objects.all().order_by('-date')[:10]
> [ (p.title, p.journal_names.name) for p in latest_pubs_list]
>
> But I'm stumped on how to bring in the
> journal_impact_factor.impact_factor. Ideas?
You're on the right track. The key bit you're missing is that you how to
refer to reverse relations. That is described in [1].
It's also necessary to realise that the many-to-one (ForeignKey) mapping
between journal_impact_factor and journal means there can be multiple
impact factors for a single journal (the reverse of many-to-one is one
to *many*, after all). However, if you know for other reasons that
you'll only have one impact for each journal, you can do this:
[(p.title, p.journal_names.name,
p.journal_names.journal_impact_factor_set.all()[0].impact_factor)
for p in latest_pubs_list]
If you're going to be doing that query a lot, you might also want to
look at the select_related() method on queyrsets (see [2]), so that you
pull all the data back from the database in one query, rather than
making three separate runs to the db (one for each access to a remote
model).
[1] http://www.djangoproject.com/documentation/db-api/#backward
[2] http://www.djangoproject.com/documentation/db-api/#select-related
Regards,
Malcolm
--
Honk if you love peace and quiet.
http://www.pointy-stick.com/blog/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---