正确获取模型ID
Get model ID correctly
我有两个模型。一种用于构建主菜单的模型,另一种用于文章的模型。每篇文章都有 ForeignKey
到 link 到主菜单项。
我想不通,如何在页面 Article
上显示 linked 到 menuItem
模型以及如何使用 menuItem
模型的 [= URL 地址的 18=] 字段?
我的模型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'),
]
您只需按 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 文档。
编辑:
我之前应该使用 objects.get()
,但我使用的是 objects.filter()
,这是错误的。不同之处在于您应该只获取一个项目,以便您可以获得与该对象相关的文章。如果您使用 filter
,您最终会得到一个查询集,但是检查多个对象上的相关对象没有意义,因此会出现错误 'QuerySet' object has no attribute 'article_set'
。
请注意,MainMenuItem
对象应该有不同的 alias
,否则 get()
会抛出异常 "Multiple objects returned"。
我有两个模型。一种用于构建主菜单的模型,另一种用于文章的模型。每篇文章都有 ForeignKey
到 link 到主菜单项。
我想不通,如何在页面 Article
上显示 linked 到 menuItem
模型以及如何使用 menuItem
模型的 [= URL 地址的 18=] 字段?
我的模型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'),
]
您只需按 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 文档。
编辑:
我之前应该使用 objects.get()
,但我使用的是 objects.filter()
,这是错误的。不同之处在于您应该只获取一个项目,以便您可以获得与该对象相关的文章。如果您使用 filter
,您最终会得到一个查询集,但是检查多个对象上的相关对象没有意义,因此会出现错误 'QuerySet' object has no attribute 'article_set'
。
请注意,MainMenuItem
对象应该有不同的 alias
,否则 get()
会抛出异常 "Multiple objects returned"。