我有两个型号。一个用于构建主菜单的模型,另一个用于文章。每篇文章都有ForeignKey
将其链接到主菜单项。
我无法理解,如何在页面Article
上显示与menuItem
模型关联的内容以及如何将menuItem
模型的alias
字段用于网址?
我的模型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
我的模型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
我的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)
我的urls.py
:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^(?P<alias>.+?)/$', 'menuItem.views.menu_builder'),
]
答案 0 :(得分:2)
您只需按MainMenuItem
上的别名进行过滤,然后获取与该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)
关于related object lookup using _set
的Django doc。
修改强>
我之前应该使用objects.get()
,但使用objects.filter()
这是错误的。不同之处在于您应该只获得一个项目,以便您可以获得该对象的相关文章。如果你使用filter
,你最终会得到一个查询集,但是检查多个对象上的相关对象是没有意义的,因此错误'QuerySet' object has no attribute 'article_set'
。
请注意,alias
对象应该有MainMenuItem
个,否则get()
会抛出异常&#34;返回多个对象&#34;。