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模型的属性/方法的名称。不要忘记通过添加ModelAdminform = ProductForm中使用该表单。

以上是关于Django Admin,修改/自定义manytomany字段的选择框中的名称的主要内容,如果未能解决你的问题,请参考以下文章

django admin 自定义模板页面未找到错误

修改django admin 字段中文名的两种方式

Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

django的admin界面怎么没有样式

python/django models中自定义用户认证及django admin自定义

python/django models中自定义用户认证及django admin自定义