在一个请求中更新整个django模型

ldxq2e6h  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(141)

我正在使用Django,并且有一个User模型和一个UserProfile模型。UserUserProfile具有一一对应的关系。
UserProfile模型有一些字段,如“gender”,“birth_date”等。我需要添加另一个名为“profession_info”的字段,用户可以在其中添加多个与职业相关的属性:“专业”、“名称”和“描述”。用户可以添加多个“职业_信息”。
我怎样才能完成这项任务?什么是最简单和最有效的方式来更新用户的个人资料?

6tr1vspr

6tr1vspr1#

您可以在模型中添加其他manytomany字段,如下所示

class ProfessionInfo(models.Model):
    profession = models.CharField(max_length=100)
    designation = models.CharField(max_length=100)
    description = models.TextField()

class UserProfile(models.Model):
    ...
    profession_info = models.ManyToManyField(ProfessionInfo)

添加这些字段后,您可以在Django REST API中创建一个serializer,并使用您的用户数据获取专业数据,如下所示

class ProfessionInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = ProfessionInfo
        fields = ['profession', 'designation', 'description']

class UserProfileSerializer(serializers.ModelSerializer):
    # use profession info from another serializer with many true
    profession_info = ProfessionInfoSerializer(many=True)

    class Meta:
        model = UserProfile
        fields = ['gender', 'birth_date', 'profession_info']

    def update(self, instance, validated_data):
        # remove profession_info before saving userProfile object.
        profession_info_data = validated_data.pop('profession_info')
        profession_info = []
        for info_data in profession_info_data:
            info, _ = ProfessionInfo.objects.get_or_create(**info_data)
            profession_info.append(info)
        instance.profession_info.set(profession_info)
        return super().update(instance, validated_data)

set的参考:https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

相关问题