【问题标题】:How to add some extra fields to the user in django-cms? (in django admin panel)如何在 django-cms 中为用户添加一些额外的字段? (在 Django 管理面板中)
【发布时间】:2015-11-13 23:58:49
【问题描述】:

我想在 django-cms(在 django 管理面板中)中为用户添加一些额外的字段。如何以最简单的方式做到这一点?

需要添加两个字段 user bio 和 image。我可以在前端使用它来显示包含所有用户信息的页面吗?

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    来自 django docs

    像这样创建您的自定义用户模型

    from django.contrib.auth.models import User
    
    class Employee(models.Model):
        user = models.OneToOneField(User)
        department = models.CharField(max_length=100)
    

    像这样更改管理文件

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from django.contrib.auth.models import User
    
    from my_user_profile_app.models import Employee
    
    # Define an inline admin descriptor for Employee model
    # which acts a bit like a singleton
    class EmployeeInline(admin.StackedInline):
        model = Employee
        can_delete = False
        verbose_name_plural = 'employee'
    
    # Define a new User admin
    class UserAdmin(UserAdmin):
        inlines = (EmployeeInline, )
    
    # Re-register UserAdmin
    admin.site.unregister(User)
    admin.site.register(User, UserAdmin)
    

    另一种选择是定义自定义用户模型。更多详情请访问https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#a-full-example

    【讨论】:

    • 我也在做同样的事情,但不知道为什么管理员中的“用户编辑”链接不起作用。它把我带到前端,发现页面未找到错误。
    • admin.py文件在哪里?
    【解决方案2】:

    取自Django documentation

    最简单的方法是创建通常称为配置文件模型的东西。因此,对于您的示例,您将创建类似

    from django.contrib.auth.models import User
    
    class Profile(models.Model):
        user = models.OneToOneField(User)
        bio = models.TextField()
        image = models.ImageField()
    

    然后,为了在管理面板中看到这一点,您需要为用户重新注册管理员

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from django.contrib.auth.models import User
    
    from my_user_profile_app.models import Profile
    
    class UserProfileInline(admin.StackedInline):
        model = Profile
        can_delete = False
        verbose_name_plural = 'profile'
    
    # Define a new User admin
    class UserAdmin(UserAdmin):
        inlines = (UserProfileInline, )
    
    # Re-register UserAdmin
    admin.site.unregister(User)
    admin.site.register(User, UserAdmin)
    

    就在前端显示这一点而言,您可以像使用其他 Django 模型一样使用 User 和 Profile。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2023-01-13
      • 2019-01-28
      • 2021-03-07
      • 2018-11-08
      • 1970-01-01
      相关资源
      最近更新 更多