This is perfect! Thank you Malcolm. One more question--simpler this time:
How would I include the "date" field from the first model ("Post") in the queryset created from "PostI18N", using something similar to: queryset = PostI18N.objects.filter(lang=get_language()).order_by('post__date') Would that date field already be included? How would I access it from the template? Thanks, J Malcolm Tredinnick wrote: > On Tue, 2008-10-07 at 18:23 -0400, J wrote: > >> Hi everyone, >> >> I'm working on a bilingual website in django for which the visitor has >> the option of choosing which language he/she prefers. All the >> interface, as well as the content, will be available in Spanish and >> English. The interface is set up to be handled by gettext and django's >> has excellent support for that. >> >> I'm having a hard time right now with the bilingual "posts" system, >> which is for contributors to add articles in different categories. >> Each post will have two items for it, one in each language. >> >> The way I've got it set up in the models is: >> >> ###### >> # The parent of all the posts, >> # only one item per post in here >> ###### >> class Post(models.Model): >> referencetitle = models.CharField(max_length=30) >> date = models.DateTimeField('Date') >> >> ###### >> # language content for each post >> # there will be two items per post in here, one for each language >> ###### >> class PostI18N(models.Model): >> post = models.ForeignKey(Post) >> slug = models.SlugField( >> 'Slug', >> help_text='Automatically built from the title.' >> ) >> title = models.CharField('Title', max_length=30) >> body = models.TextField('Body Text') >> lang = models.CharField(max_length = 5, choices = >> settings.LANGUAGES) >> >> >> >> How do it do this in views so that I only get the "PostI18N" items >> that are in the current language chosen by the users, >> > > There's a currently undocumented function in django.utils.translation > called get_language() that you can use to return the currently active > locale. So something like > > PostI18N.objects.filter(lang=get_language()) > > will filter out only the articles matching the current language. You can > safely use that function, even though I said it was undocumented. That's > because it will be documented inside the next 48 hours. I'm currently > rewriting the i18n documentation and just made a note to include that (I > hadn't realised until just now that we had left it out). > > >> and how do I iterate through both of these models at the same time in >> templates so that I can access the Date field from the related table >> ("Post") to sort them, but display the main content fields from >> "PostI18N". >> > > Sorting is generally best done in the view. Even better, sorting can be > done by the database at selection time. Modifying the above queryset, > you could write > > PostI18N.objects.filter(lang=get_language()).order_by('post__date') > > > >> I'm initially attempting to display this data using generic views >> (django.views.generic.date_based.archive_index). Do you think these >> generic views can handle something like this? If not, how would I >> write an equivalent custom view? >> > > Generic views can handle anything you can create as a queryset. However, > the above queryset actually depends on some information that is not > available until the view is active (you can't compute it once). This is > because the results of get_language() depend on the locale. So you would > need to wrap things up like this: > > def my_view(request, ....): > qs = PostI18N... # <-- as above > return archive_index(qs, ....) > > That way, the get_language() call is executed each time in the right > environment. > > Regards, > Malcolm > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---