【问题标题】:Django User model not working after being overridedDjango用户模型在被覆盖后不起作用
【发布时间】:2020-02-16 04:20:30
【问题描述】:

说明我已经扩展了 Django User 模型并添加了一些字段。然后我保存了模型并将其替换为使用StackedInline 的最后一个用户模型。为此,我使用django_rest_framework。更具体地说,这是我的代码:

模型.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # TODO: add Upload directory to the avatar
    avatar = models.ImageField()
    university = models.CharField(max_length=100, default="")
    discipline = models.CharField(max_length=100, default="")
    joined_at = models.DateTimeField(auto_now=True)

class UserProfileInline(admin.StackedInline):
    '''Stacked Inline View for UserProfile'''
    model = UserProfile

class UserAdmin(BaseUserAdmin):
    inlines = (
        UserProfileInline,
    )

序列化器

from rest_framework import serializers
from .models import User

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = "__all__"

发布请求:

问题 我可以看到我在django-admin 的用户模型中添加的附加字段,但是每当我想发送一个发布请求以创建新用户时,附加字段都会被忽略! (虽然我已将数据放在发布请求中,但在管理员中显示为空白)

问题

  1. 如何修复或编辑我的模型以使其正常工作?

  2. 我添加了AUTH_USER_MODEL = 'user.UserProfile',但我遇到了"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL 错误,而我在INSTALLED_APPS 中添加了应用程序。有人可以帮我解决吗?

【问题讨论】:

  • 您是否更改了AUTH_USER_MODEL 设置?
  • 你能从管理面板添加user_profile吗?
  • @HamidrezaAhmadi 我没有在管理页面注册 user_profile,因为我只想覆盖 User 模型,而不是必须分离模型!
  • 那么你能添加一个新用户吗?
  • @HamidrezaAhmadi 是的!您可以在我的帖子末尾看到我的帖子请求结果的屏幕截图。

标签: django django-rest-framework django-admin


【解决方案1】:

Django 提供several ways to customize its user model 包括:

  • 第一:用OneToOneField相关模型扩展模型,不需要更改AUTH_USER_MODEL设置。
  • 第二:用扩展AbstractUser的模型替换用户模型。如果你选择第二种方式,可以关注the documentation

看来您将采用第一种方式,并且您做得对,除非您没有使用嵌套序列化程序。为了让 API 能够创建嵌套对象,您必须使用嵌套序列化程序,如 DRF 文档中的here 所述。

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 2011-06-26
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2017-07-13
    • 2022-01-11
    • 2012-09-18
    • 2017-08-23
    相关资源
    最近更新 更多