Reputation: 343
I got two models. One model for building main menu, another one - for Articles. Every Article have ForeignKey
to link it to main menu item.
I can't figured out, how can I show on page Article
, that linked to menuItem
Model and how to use menuItem
model's alias
field for URL address?
My model menuItem
:
# -*- coding: utf-8 -*-
from django.db import models
class MainMenuItem(models.Model):
class Meta:
db_table = "menu_item"
title = models.CharField(max_length = 50)
alias = models.CharField(max_length = 50)
def __unicode__(self):
return self.title
def __str__(self):
return self.title
My model Article
:
class Article(models.Model):
class Meta:
db_table = "article"
menu = models.ForeignKey(MainMenuItem, blank = True, null = True)
active = models.BooleanField(default = True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return unicode(self.menu) or u''
def __str__(self):
return self.menu
My views.py
def menu_builder(request, alias):
findId = MainMenuItem.objects.????
elements = {
'menuItems': MainMenuItem.objects.all(),
'article': Article.objects.get(id=??????),
}
return render_to_response('myview.html', elements)
My urls.py
:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^(?P<alias>.+?)/$', 'menuItem.views.menu_builder'),
]
Upvotes: 1
Views: 475
Reputation: 25559
You just filter by the alias on MainMenuItem
then get all articles that related to that MainMenuItem
:
def menu_builder(request, alias):
main_menu_item = MainMenuItem.objects.get(alias=alias)
elements = {
'menuItems': main_menu_item,
'articles': main_menu_item.article_set.all(),
}
return render_to_response('myview.html, elements)
Django doc about related object lookup using _set
.
Edit:
I should have been using objects.get()
previously, but was using objects.filter()
which is wrong. The difference is that you should get exactly one item so that you could get related articles to that object. If you use filter
, you would end up having a queryset, but then it doesn't make sense to check related objects on multiple objects, hence the error 'QuerySet' object has no attribute 'article_set'
.
Beware that you should have distinct alias
for MainMenuItem
objects, otherwise get()
would throw an exception "Multiple objects returned".
Upvotes: 2