在Django admin中显示User ForeignKey的字段

时间:2013-09-20 07:42:28

标签: python django django-admin

class Lab(Model):
  responsible = ForeignKey(User)

这是我的Django模型的一个非常简化的版本。基本上问题在于Django管理员,当我想编辑或添加新的Lab对象时,包含User对象的下拉列表仅显示User.username值,这些值是在我的情况下只有数字。

我希望下拉列表显示User.last_name值。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您必须为实验室管理员定义自己的用户选择字段。

from django import forms
from django.contrib import admin


class UserChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.last_name

# Now you have to hook this field up to lab admin.

class LabAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        if db_field.name == 'responsible':
            kwargs['form_class'] = UserChoiceField
        return super(LabAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

这样的事情。我没有测试过,所以可能会有一些拼写错误。希望这有帮助!

答案 1 :(得分:2)

django中的默认User模型返回username作为对象表示。如果要更改此设置,则必须覆盖__unicode__方法。

您无法将proxy model写入extend the user model,然后覆盖__unicode__方法以返回last_name

这样的事情:

class MyUser(User):
   class Meta:
      proxy = True

   def __unicode__(self):
        return self.last_name


class Lab(Model):
   responsible = ForeignKey(MyUser)