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

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

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

我怎样才能做到这一点?

4

2 回答 2

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)

类似的东西。我没有测试它,所以可能有一些错别字。希望这可以帮助!

于 2013-09-20T08:06:02.210 回答
2

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

您不能编写 aproxy model扩展用户模型,然后覆盖__unicode__要返回的方法last_name

像这样的东西:

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

   def __unicode__(self):
        return self.last_name


class Lab(Model):
   responsible = ForeignKey(MyUser)
于 2013-09-20T08:13:55.680 回答