AdminModel上的Django用户模型字段

时间:2011-06-01 06:43:55

标签: django django-admin user-profile

我的目的是在管理站点上只看到用户名,电子邮件和电话号码。

我通过扩展用户模型来创建UserProfile:

model.py

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, null=True,blank=True)
    phone = models.CharField(max_length=20, null=True,blank=True)
    country = models.CharField(max_length=20, null=True,blank=True)
    state = models.CharField(max_length=20, null=True,blank=True)
    zip = models.CharField(max_length=10, null=True,blank=True)
    code = models.CharField(max_length=40, null=True)


    def user_email(self):
        return self.user.email

admin.py

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'时( fields =('name','user_email','phone',))当我尝试进入管理站点时,我得到的字段:

'UserProfileAdmin.fields'指的是表单中缺少的字段'user_email'。

3 个答案:

答案 0 :(得分:0)

相关模型上的字段使用两个下划线。不知道它是否会在管理员中工作。

list_display   = ('name','user__email',)

答案 1 :(得分:0)

仅仅因为我最近使用过它你也可能想要这个:如果你不想在Django的“用户”管理页面中添加内联管理员,你可以这样做(至少在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)

答案 2 :(得分:0)

如果不使用内联,则无法将相关模型中的可编辑字段放入管理表单中。您可以将该字段显示为只读值:只需将其添加到readonly_fields