django,管理模板错误渲染时捕获异常:“NoneType”对象没有属性“标签”;
美好的一天伙计们! 在项目中,除其他外,都有模型:
class Category(models.Model):
name = models.CharField(max_length = 50, blank = False, null = False)
def __unicode__(self):
return "Category %s" % self.name
class Meta:
db_table = "categories"
managed = False
class Site(models.Model):
user = models.ForeignKey(User, blank = False, null = False, db_column = "user_id")
name = models.URLField(verify_exists = True, blank = False, null = False)
categories = models.ManyToManyField(Category, blank = True, through = "CategorySites", verbose_name = "Category")
def __unicode__(self):
return self.name
class Meta:
db_table = "sites"
managed = False
class CategorySites(models.Model):
site = models.ForeignKey(Site, blank = False, null = False, db_column = "site_id")
category = models.ForeignKey(Category, blank = False, null = False, db_column = "category_id")
def __unicode__(self):
return "Relation between site %s and category %s" % (self.site.name, self.category.name)
class Meta:
db_table = "categories_sites"
managed = False
因此,正如您所见,存在多对多关系。一般来说它工作得很好 - 我可以通过manage.py shell或服务器端功能添加和管理模型。 我想在管理站点上启用编辑这种类型的关系,因此,我为站点添加了管理模型:
class SiteAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
list_filter = ('name', 'categories')
fieldsets = (
(None, {"fields": ("categories",)}),
)
def queryset(self, request):
qs = super(SiteAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(user = request.user)
def has_change_permission(self, request, obj=None):
if not obj:
return True # So they can see the change list page
if request.user.is_superuser or obj.user == request.user:
return True
else:
return False
has_delete_permission = has_change_permission
但是当我进入管理->站点->添加站点(或编辑)时,django 抛出捕获异常渲染时: 'NoneType' 对象没有属性 'label' 。 如果可以修复它怎么办?
good day guys!
in project, among others, have models:
class Category(models.Model):
name = models.CharField(max_length = 50, blank = False, null = False)
def __unicode__(self):
return "Category %s" % self.name
class Meta:
db_table = "categories"
managed = False
class Site(models.Model):
user = models.ForeignKey(User, blank = False, null = False, db_column = "user_id")
name = models.URLField(verify_exists = True, blank = False, null = False)
categories = models.ManyToManyField(Category, blank = True, through = "CategorySites", verbose_name = "Category")
def __unicode__(self):
return self.name
class Meta:
db_table = "sites"
managed = False
class CategorySites(models.Model):
site = models.ForeignKey(Site, blank = False, null = False, db_column = "site_id")
category = models.ForeignKey(Category, blank = False, null = False, db_column = "category_id")
def __unicode__(self):
return "Relation between site %s and category %s" % (self.site.name, self.category.name)
class Meta:
db_table = "categories_sites"
managed = False
so, as you see there is many-to-many relation. generally it work well - i can add and manage models through manage.py shell, or server-side functions.
I want to enable editing this type of relation on admin site, so, i've added admin model for Sites:
class SiteAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
list_filter = ('name', 'categories')
fieldsets = (
(None, {"fields": ("categories",)}),
)
def queryset(self, request):
qs = super(SiteAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(user = request.user)
def has_change_permission(self, request, obj=None):
if not obj:
return True # So they can see the change list page
if request.user.is_superuser or obj.user == request.user:
return True
else:
return False
has_delete_permission = has_change_permission
but when i'm going in admin->sites->Add site (or edit) django throws Caught an exception while rendering: 'NoneType' object has no attribute 'label' .
how can if fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为此,您需要将未记录的
formfield_for_manytomany
方法添加到您的SiteAdmin
类中:以覆盖默认情况下不显示通过选项指定的模型的多个选择小部件 文档。
虽然这有效,但我仍然认为这不应该在 Django 中导致错误。
For that you need to add undocumented
formfield_for_manytomany
method to yourSiteAdmin
class:to override default of not displaying multiple select widget for models with through option specified docs.
Although this works I still think that this should not cause error in Django.