如何在 Django 中正确使用带有嵌套序列化器的 POST?

这是我第一次使用 Django Rest Framework,并且遇到了一个普遍问题。我尝试了许多其他 stackoverflow 解决方案和谷歌上提供的其他解决方案,但没有任何效果对我有用。


我的模特:


class Gender(models.Model):

    gender = models.CharField(max_length=10)


    def __str__(self):

        return self.gender


class User(models.Model):


    first_name    = models.CharField(max_length=20)

    last_name     = models.CharField(max_length=20)

    email_id      = models.EmailField(max_length=100, default="")

    city          = models.CharField(max_length=20, blank=True)

    state         = models.CharField(max_length=50, blank=True)

    country       = models.CharField(max_length=20, blank=True)

    zip_code      = models.CharField(max_length=6, blank=True)

    mobile_number = models.CharField(max_length=10, blank=True)

    birthdate     = models.DateField(blank=True, null=True)

    gender        = models.ForeignKey(Gender, on_delete=models.CASCADE, null=True, blank=True, related_name='user_gender')

    joined        = models.DateTimeField(auto_now_add=True, blank=True, null=True)



    def __str__(self):

        return self.first_name + ' ' + self.last_name

我希望在创建新用户时,我们仅使用性别模型中可用性别的性别


我的序列化器


class GenderSerilizer(serializers.ModelSerializer):


    class Meta:

        model = Gender

        exclude = [

                    'id',

                  ]              


class UserSerializer(serializers.ModelSerializer):


    gender = GenderSerilizer()

    class Meta:

       model = User

       fields = [

                'id',

                'first_name',

                'last_name',

                'email_id',

                'city',

                'state',

                'country',

                'zip_code',

                'mobile_number',

                'birthdate',

                'gender',

            ]



def create(self, validated_data):

    gender_data = validated_data.pop('gender')

    user = User.objects.create(**validated_data)

    Gender.objects.create(user=user, **gender_data)

    return user


弑天下
浏览 184回答 1
1回答

小唯快跑啊

恰恰相反。User有一个ForeignKeyfor gender,因此它不是Gender需要user关键字参数,而是User需要gender关键字参数。gender = Gender.objects.get_or_create(...)如果您还想在数据库中创建该条目,那么与您的参数一起使用是非常安全的,然后User使用您的Gender对象作为关键字参数创建一个实例user = User(..., gender=gender)然后就是return user,这将有该gender集合。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python