我有一个用于电子邮件模板的Django管理网站。 这些电子邮件模板具有ContentType ForeignKey字段。此字段显示在管理员更改视图中。
型号:(不显示相关代码)
class EmailTemplate(models.Model):
name = models.CharField(verbose_name=_('Name'), max_length=200, unique=True)
content_type = models.ForeignKey(ContentType, verbose_name=_('Content Type'))
admin.py :(不显示非相关代码)
class EmailTemplateAdmin(admin.ModelAdmin):
form = EmailTemplateForm
list_display = ('name',)
fieldsets = (
(None, {
'classes': ('monospace',),
'fields': ('name','content_type',)
}),
)
我现在想自定义字段“ content_type”。现在,它只是显示ContentType,我想向其中添加相应的“ app_label”(我们有很多应用程序,但遗憾的是,某些模型存在于多个应用程序中(因此名称显示了两次,无法对其进行区分)。相当旧的代码库,并且无法将所有模型重命名为应用程序之间唯一的。
简而言之:
如何更改我的content_types字段显示如下:“ [Content_type] [Content_type.app_label]
答案 0 :(得分:0)
您可以为EmailTemplateForm
添加自己的自定义字段
class EmailTemplateAdmin(admin.ModelAdmin):
form = EmailTemplateForm
list_display = ('name',)
fieldsets = (
(None, {
'classes': ('monospace',),
'fields': ('name','content_type',)
}),
)
class EmailTemplateForm(forms.ModelForm):
content_type = CustomModelChoiceField(queryset=ContentType.objects.all())
class Meta:
model = EmailTemplate
...
class CustomModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
# maybe you can find better solution to get app_label
return "%s %s" % (obj, obj.__class__._meta.app_label)