Python Django:父类别不';显示在管理界面中
问题: 在我打开任何菜单项之前,“父类别”列中会显示短划线符号。打开菜单项配置文件时,我会得到“父类别”项(请参见下面的Python Django:父类别不';显示在管理界面中,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,问题: 在我打开任何菜单项之前,“父类别”列中会显示短划线符号。打开菜单项配置文件时,我会得到“父类别”项(请参见下面的admin.py) 打开菜单配置文件前后:和(注意父类别列) Mymodels.py:(注意家长id) Myadmin.py:() 问题:如何在不打开任何菜单项配置文件的情况下重写我的admin.py以显示父id项 我已经试过了,但效果不好。如果您有任何帮助,我们将不胜感激。在不更改您的模型的情况下,最简单的解决方案可能是在您的管理中添加一个parent方法,并使用它而不是列表
admin.py
)
打开菜单配置文件前后:和(注意父类别列)
Mymodels.py
:(注意家长id
)
Myadmin.py
:()
问题:如何在不打开任何菜单项配置文件的情况下重写我的admin.py
以显示父id
项
我已经试过了,但效果不好。如果您有任何帮助,我们将不胜感激。在不更改您的模型的情况下,最简单的解决方案可能是在您的管理中添加一个
parent
方法,并使用它而不是列表显示中的“parent\u id”:
class MyMenu(admin.ModelAdmin):
# ....
def parent(self, obj):
if obj.parent_id:
return Menu.objects.get(pk=obj.parent_id).cat_title
return ""
list_display = ('cat_title', 'menu_title', 'parent', 'level')
# Unrelated but you may also want to rewrite `get_choices`
# in a simpler and more performant way:
def get_choices(self):
choices = models.Menu.objects.values_list("id", "cat_title"))
return (('',''),) + tuple(choices)
或者将parent
作为菜单上的方法或属性
模型:
class Menu(models.Model):
# ...
# you may want to use django's `cached_property` instead
# but then you'll have to invalidate the cache when setting
# (or unsetting) `.parent_id`
@property
def parent(self):
if not self.parent_id:
return None
return Menu.objects.get(pk=self.parent_id)
并将“家长”添加到管理员的列表\u显示中
但是,由于菜单.parent\u id
实际上是菜单
上的外键,因此正确的解决方案是在您的模型中声明它:
class Menu(models.Model):
cat_title = models.CharField(max_length=150, verbose_name='Category title')
menu_title = models.CharField(max_length=150, verbose_name='Menu title')
parent = models.ForeignKey("self", blank=True, null=True, related_name="children")
# etc
伟大的工作如我所料。谢谢
class Menu(models.Model):
# ...
# you may want to use django's `cached_property` instead
# but then you'll have to invalidate the cache when setting
# (or unsetting) `.parent_id`
@property
def parent(self):
if not self.parent_id:
return None
return Menu.objects.get(pk=self.parent_id)
class Menu(models.Model):
cat_title = models.CharField(max_length=150, verbose_name='Category title')
menu_title = models.CharField(max_length=150, verbose_name='Menu title')
parent = models.ForeignKey("self", blank=True, null=True, related_name="children")
# etc