class Lab(Model):
responsible = ForeignKey(User)
这是我的Django模型的一个非常简化的版本。基本上问题在于Django管理员,当我想编辑或添加新的Lab
对象时,包含User
对象的下拉列表仅显示User.username
值,这些值是在我的情况下只有数字。
我希望下拉列表显示User.last_name
值。
我该怎么做?
答案 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)