8.如何在下拉菜单中更改外键显示的文本

HeroCategory外键,在下拉框里,显示的只是名字,但是你想显示”Category:name”格式。 你可以在Category修改__str__方法,但是你只希望在admin中进行更改,你可以通过创建一个forms.ModelChoiceField的子类,并且自定义label_from_instance方法。

  1. class CategoryChoiceField(forms.ModelChoiceField):
  2. def label_from_instance(self, obj):
  3. return "Category: {}".format(obj.name)

之后我们可以重写category的以用到这个字段formfield_for_foreignkey

  1. def formfield_for_foreignkey(self, db_field, request, **kwargs):
  2. if db_field.name == 'category':
  3. return CategoryChoiceField(queryset=Category.objects.all())
  4. return super().formfield_for_foreignkey(db_field, request, **kwargs)

你的admin看起来会想这样: 8.如何在下拉菜单中更改外键显示的文本 - 图1