:
class Template(models.Model):
user = models.ForeignKey(User);
app / admin.py中的:
class TemplateAdmin(admin.ModelAdmin):
list_display = ('user', 'status',);
当我在Site Adminitration中编辑模板表时,我会看到用户字段的下拉列表。下拉列表中的值为“username”,但app_templates将用户值存储为“user_id”。
如何使站点管理中的下拉列表显示first_name,last_name,email而不是'username'的组合?但是,'templates'表会将值存储为'id'?
谢谢!
答案 0 :(得分:1)
来自Django Docs:
模型的 unicode ( str )方法将是 调用以生成要使用的对象的字符串表示 该领域的选择;提供自定义表示,子类 ModelChoiceField并覆盖label_from_instance。这种方法会 接收一个模型对象,并返回一个适合的字符串 代表它。
https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield
所以要覆盖它:
class UserChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return '%s - %s - %s' % (obj.first_name, obj.last_name, obj.email)
class TemplateAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(TemplateAdminForm, self).__init__(*args, **kwargs)
self.fields['user'] = UserChoiceField(queryset=User.objects.all())
class TemplateAdmin(admin.ModelAdmin):
form = TemplateAdminForm
答案 1 :(得分:0)
将'user'更改为:
list_display = ('full_username')
将以下内容添加到类Template:
def full_username(self):
return str(self.user.first_name) + ' ' + str(self.user.last_name) + ' ' + str(self.user.email);