【问题标题】:How to prefix a foreign key object to a model field in Wagtail admin?如何在 Wagtail admin 中为模型字段添加外键对象前缀?
【发布时间】:2021-11-16 08:09:02
【问题描述】:

在这种情况下,每个功能都有一个 Epic (models.Model)

epic = models.ForeignKey(Epic, on_delete=models.CASCADE, default='')

在管理下拉菜单中(并且仅在此处),我想将每个项目显示为:

epic.name - feature.name

因为我的一些功能名称相似但史诗不同。我无法更改 Feature 模型的 __str __ 函数,否则会影响整个应用。

我怎样才能做到这一点?

【问题讨论】:

    标签: django drop-down-menu wagtail wagtail-admin


    【解决方案1】:

    一种方法是继承 Django 的 ModelChoiceField,并覆盖提供标签的 label_from_instance 方法:

    from django.forms import ModelChoiceField
    
    class FeatureChoiceField(ModelChoiceField):
        def label_from_instance(self, obj):
            return "%s - %s" % (obj.epic.name, obj.name)
    

    然后您需要customise the edit form 使用该自定义表单字段类型来代替默认的 ModelChoiceField:

    from wagtail.admin.forms import WagtailAdminModelForm
    # note - use WagtailAdminPageForm if this is a page model rather than a
    # plain Django model managed through snippets / ModelAdmin
    
    class ScopeForm(WagtailAdminModelForm):
        feature = FeatureChoiceField(queryset=Feature.objects.all())
    
    
    class Scope(models.Model):
        # ...
    
        base_form_class = ScopeForm
    

    【讨论】:

    • 完美运行,谢谢!
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2021-07-06
    • 1970-01-01
    • 2011-09-23
    • 2013-01-20
    • 2015-08-30
    相关资源
    最近更新 更多