为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2021-09-24 15:23:24
我正在尝试使用 django rest auth 模型为我的用户创建一个配置文件,但是当我将数据发送到用户的创建时,用户的图像没有被填充,也就是说,它变得空了,我试图发送节点与图像一样多,与 profile.image 一样多,但在我的代码下面没有成功:模型\配置文件.pyfrom django.conf import settingsfrom django.db import modelsclass 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序列化器\用户.pyfrom rest_framework import serializersfrom rest_framework.validators import UniqueValidatorfrom django.contrib.auth.models import Userfrom src.v1.user.models.profile import Profilefrom .profile import ProfileSerializerclass 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')
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

SerializerMethodField只能按设计读取。因此,这不仅仅是图像,个人资料上没有发布任何内容。


此外,如果在 GET 请求期间不存在配置文件,则创建该配置文件是一种糟糕的设计,因为通常,GET 请求应该是安全的并且不会改变应用程序的状态。


相反,您应该在用户创建期间创建配置文件。由于配置文件中只有一个字段要发布,因此对发布数据使用平面表示可能更简单、更有效。


这是你应该做的。


序列化程序/user.py


class 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

现在您可以将您的图像字段与其他用户字段一起发布


查看完整回答
反对 回复 2021-09-24
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信