class Lab(Model):
responsible = ForeignKey(User)
这是我的 Django 模型的一个非常简化的版本。基本上问题出在 Django 管理员中,当我想编辑或添加新Lab
对象时,包含对象的下拉列表User
仅显示User.username
值,在我的情况下它们只是数字。
我希望下拉列表显示User.last_name
值。
我怎样才能做到这一点?
class Lab(Model):
responsible = ForeignKey(User)
这是我的 Django 模型的一个非常简化的版本。基本上问题出在 Django 管理员中,当我想编辑或添加新Lab
对象时,包含对象的下拉列表User
仅显示User.username
值,在我的情况下它们只是数字。
我希望下拉列表显示User.last_name
值。
我怎样才能做到这一点?
您必须为实验室管理员定义自己的用户选择字段。
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)
类似的东西。我没有测试它,所以可能有一些错别字。希望这可以帮助!
User
django中的默认模型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)