问题描述
|
我的目的是在管理站点上仅查看用户名,电子邮件和电话号码。
我已经通过扩展用户模型创建了UserProfile:
模型
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey(User,unique=True)
name = models.CharField(max_length=50,null=True,blank=True)
address = models.CharField(max_length=50,blank=True)
phone = models.CharField(max_length=20,blank=True)
country = models.CharField(max_length=20,blank=True)
state = models.CharField(max_length=20,blank=True)
zip = models.CharField(max_length=10,blank=True)
code = models.CharField(max_length=40,null=True)
def user_email(self):
return self.user.email
管理员
from myApp.models import UserProfile
from django.contrib import admin
class UserProfileAdmin(admin.ModelAdmin):
fields = (\'name\',\'phone\',)
list_display = (\'name\',\'user_email\',)
admin.site.register(UserProfile,UserProfileAdmin)
所以在list_display上它可以正常工作,我只能看到我选择的列,但是当我添加\'user_email \'(字段=(\'name \',\'user_email \',\'phone \', ))尝试进入管理站点时得到的字段:
\'UserProfileAdmin.fields \'是指表单'user_email \'所缺少的字段。
解决方法
相关模型上的字段使用两个下划线。 Dunno是否可以在管理员中使用。
list_display = (\'name\',\'user__email\',)
, 只是因为我最近使用过它,您可能也想要这样做:如果您不想在Django中的\“ User \”管理页面中添加内联管理员,则可以执行以下操作(至少在Django 1.3中):
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from models import UserProfile
class UserProfileInlineAdmin(admin.StackedInline):
model = UserProfile
class MyUserAdmin(UserAdmin):
inlines = [ UserProfileInlineAdmin ]
admin.site.unregister(User)
admin.site.register(User,MyUserAdmin)
, 您不能在不使用内联的情况下将相关模型中的可编辑字段放入管理表单中。您可以将字段显示为只读值:只需将其添加到“ 4”即可。