0

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

我通过扩展 User 模型创建了 UserProfile:

模型.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

管理员.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”。

4

3 回答 3

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)
于 2011-06-01T06:59:29.767 回答
0

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

于 2011-06-01T09:40:12.787 回答
0

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

list_display   = ('name','user__email',)
于 2011-06-01T06:48:20.623 回答