为用户 auth django 创建用户配置文件

我正在尝试使用 django rest auth 模型为我的用户创建一个配置文件,但是当我将数据发送到用户的创建时,用户的图像没有被填充,也就是说,它变得空了,我试图发送节点与图像一样多,与 profile.image 一样多,但在我的代码下面没有成功:

http://img3.mukewang.com/614d7fe60001915007430639.jpg

模型\配置文件.py


from django.conf import settings

from django.db import models



class Profile(models.Model):

    image = models.ImageField(blank=True)

    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)


    def __str__(self):

        return self.user.email

序列化器\用户.py


from rest_framework import serializers

from rest_framework.validators import UniqueValidator

from django.contrib.auth.models import User

from src.v1.user.models.profile import Profile

from .profile import ProfileSerializer



class UserSerializer(serializers.ModelSerializer):

    profile = serializers.SerializerMethodField()

    email = serializers.EmailField(

        required=True,

        validators=[UniqueValidator(queryset=User.objects.all())]

    )

    username = serializers.CharField(

        max_length=32,

        validators=[UniqueValidator(queryset=User.objects.all())]

    )

    password = serializers.CharField(min_length=6, write_only=True)


    @staticmethod

    def get_profile(user):

        """

        Get or create profile

        """


        profile, created = Profile.objects.get_or_create(user=user)

        return ProfileSerializer(profile, read_only=True).data


    def create(self, validated_data):

        user = User(email=validated_data['email'],

                    username=validated_data['username'])

        user.set_password(validated_data['password'])

        user.save()

        return user


    class Meta:

        model = User

        fields = ('id', 'username', 'email', 'password', 'profile')


蛊毒传说
浏览 215回答 2
2回答

鸿蒙传说

SerializerMethodField只能按设计读取。因此,这不仅仅是图像,个人资料上没有发布任何内容。此外,如果在 GET 请求期间不存在配置文件,则创建该配置文件是一种糟糕的设计,因为通常,GET 请求应该是安全的并且不会改变应用程序的状态。相反,您应该在用户创建期间创建配置文件。由于配置文件中只有一个字段要发布,因此对发布数据使用平面表示可能更简单、更有效。这是你应该做的。序列化程序/user.pyclass UserSerializer(serializers.ModelSerializer):    profile = ProfileSerializer(read_only=True)    image = serializers.ImageField(write_only=True)    email = serializers.EmailField(        required=True,        validators=[UniqueValidator(queryset=User.objects.all())]    )    username = serializers.CharField(        max_length=32,        validators=[UniqueValidator(queryset=User.objects.all())]    )    password = serializers.CharField(min_length=6, write_only=True)    def create(self, validated_data):        user = User(email=validated_data['email'], username=validated_data['username'])        user.set_password(validated_data['password'])        user.save()        Profile.objects.create(user=user, image=validated_data['image')        return user现在您可以将您的图像字段与其他用户字段一起发布
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python