【问题标题】:Django User model fields at AdminModelAdminModel 中的 Django 用户模型字段
【发布时间】:2011-06-01 06:43:55
【问题描述】:

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

我通过扩展 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

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”。

【问题讨论】:

    标签: django django-admin user-profile


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      仅仅因为我最近使用了它,你可能也想要这个:如果你不想在 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)
      

      【讨论】:

      • 我正要回答同样的问题,这是 2010 年的帖子(祝福 google):blog.timc3.com/2010/02/18/extending-djangos-user-admin
      • 好的,感谢所有答案,但这不是我试图做的。我不想替换 django adminUser 我想保留 django User 模型,我想在我的项目中拥有另一种用户类型,将来可能会登录到系统,但现在我只想获取详细信息并向他发送电子邮件、时事通讯等。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 2021-04-15
        • 2019-12-30
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多