0

我正在尝试覆盖 Django 中的默认用户创建。我正在使用 Django Rest Framework 和 Djoser。我在这里找到了很好的实现技巧:https ://stackoverflow.com/a/49096275/9123009

但我有自定义配置文件模型,称为:与我的自定义用户模型具有 OneToOneField 关系的 Userprofile。

这是我的序列化程序:

class UserRegistrationSerializer(serializers.ModelSerializer):
    usr_profile = UserprofileSerializer()
    email = serializers.CharField()
    password = serializers.CharField(
        write_only=True,
        style={'input_type': 'password'}
    )

    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'usr_profile')

当我尝试向 /auth/users/ 端点发出以下 POST 请求时:

{   
    "email": "adnan@test115.se",
    "password": "xxxxxx",
    "usr_profile": {
      "first_name": "adnan",
      "last_name": "erkoc",
      "cell_no": "23233"
    },
} 

我不断收到一个错误,即 User.profile 必须是 Userprofile 实例。

4

1 回答 1

1

这个问题与 Djoser 无关,而是与 DRF 本身有关。

您可以在 DRF 文档中找到答案

可写嵌套序列化器

class UserRegistrationSerializer(serializers.ModelSerializer):
    usr_profile = UserprofileSerializer()
    email = serializers.CharField()
    password = serializers.CharField(
        write_only=True,
        style={'input_type': 'password'}
    )

    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'usr_profile')

    def create(self, validated_data):
        usr_profile = validated_data.pop('usr_profile')
        user = UserModel.objects.create(**validated_data)
        UserProfile.objects.create(user=user, **usr_profile)
        return album
于 2020-01-10T20:46:01.990 回答