我的模型定义为:
class Feature(models.Model):
content_type = models.ForeignKey(ContentType)
user = models.ForeignKey(User, unique = True)
object_id = models.PositiveIntegerField()
description = models.TextField("Description", blank=False)
content_object = generic.GenericForeignKey('content_type', 'object_id')
在django管理站点中,content_type的下拉列表显示所有表,但是作为其定义的名称,而不是详细的名称。如何更改此项以显示漂亮的名称而不是编码名称?
答案 0 :(得分:3)
在不更改ContentType模型的情况下,您可以通过自定义用于Feature模型的ModelAdmin来完成此操作。具体来说,您可以覆盖formfield_for_foreignkey
方法,该方法定义用于模型上每个外键的字段。
您还必须定义自定义的ModelChoiceField,它会覆盖下拉列表使用的常规标签。
在您的admin.py中:
from django.contrib import admin
from django.forms import ModelChoiceField
from myproject.myapp.models import Feature
class CustomContentTypeChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "Pretty name for #%d" % obj.id
class FeatureAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "content_type":
return CustomContentTypeChoiceField(**kwargs)
return super(FeatureAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(Feature, FeatureAdmin)
参考文献:
ModelChoiceFields:https://docs.djangoproject.com/en/1.3/ref/forms/fields/#modelchoicefield