Django Admin,修改/自定义manytomany字段的选择框中的名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Admin,修改/自定义manytomany字段的选择框中的名称相关的知识,希望对你有一定的参考价值。
我有2个型号分类和产品。类别对自己有FK,对公司有产品FK。
class Product(Meta):
categories = models.ManyToManyField(Category, related_name='products')
class Category(SEO, MetaData):
parent = models.ForeignKey('self', blank=True, null=True, verbose_name='parent category', on_delete=models.CASCADE)
在产品创建/编辑页面的Django Admin中,我需要选择Parent的类别。
此刻只是一个长选择框,名称为Categories。我想介绍category-subcategory的所有路径。
例如:
Now: Category A Name
Need: Category Parent Name :: SubCategory Parent Name :: Category A Name
我不想修改def __str__
因为在其他地方也使用过。
答案
您可以使用这样的自定义ModelForm
:
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__' # It's actually best to list the fields out as per Two Scoops of Django
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['categories'].label_from_instance =
lambda obj: obj.enumerated_path
将enumerated_path
替换为Product
模型的属性/方法的名称。不要忘记通过添加ModelAdmin
在form = ProductForm
中使用该表单。
以上是关于Django Admin,修改/自定义manytomany字段的选择框中的名称的主要内容,如果未能解决你的问题,请参考以下文章
Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接