1

说明我已经扩展了 Django 用户模型并添加了一些字段。然后我保存了模型并将其替换为最后一个用户模型,使用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__"

发帖请求:

发布请求

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

Django 管理员

问题

  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. 有人可以帮我解决吗?

4

1 回答 1

0

Django 提供了几种自定义用户模型的方法,包括:

  • 第一:用OneToOneField相关模型扩展模型,不需要更改AUTH_USER_MODEL设置。
  • 第二:用扩展的模型代替用户模型AbstractUser。如果您选择第二种方式,您可以按照文档进行操作。

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

于 2019-11-23T18:10:26.023 回答