一尘不染

Django admin-更改ForeignKey显示文本

django

选择字段作为ForeignKey时,如何更改select中的显示文本?我不仅需要显示FK的名称,还需要显示其父级的名称。

有人可以提供线索吗?


阅读 799

收藏
2020-03-27

共1个答案

一尘不染

好吧,如果你希望它仅在admin中生效而不在全局中生效,则可以创建一个自定义ModelChoiceField子类,在自定义中使用该子类,ModelForm然后将相关的admin类设置为使用自定义表单。以Person@Enrique使用的模型具有FK的示例为例:

class Invoice(models.Model):
      person = models.ForeignKey(Person)
      ....

class InvoiceAdmin(admin.ModelAdmin):
      form = MyInvoiceAdminForm


class MyInvoiceAdminForm(forms.ModelForm):
    person = CustomModelChoiceField(queryset=Person.objects.all()) 
    class Meta:
          model = Invoice

class CustomModelChoiceField(forms.ModelChoiceField):
     def label_from_instance(self, obj):
         return "%s %s" % (obj.first_name, obj.last_name)
2020-03-27