我正在使用Django,有一台User型号的和一台UserProfile型号的.UserUserProfile是一对一的关系.

UserProfile模型有一些字段,如"性别","出生日期"等.我需要添加另一个字段称为"职业信息",在那里用户可以添加多个职业相关的属性:"职业","称号"和"描述".用户可以添加多个"PROCESS_INFO".

我怎样才能完成这项任务呢?更新用户个人资料的最简单、最有效的方法是什么?

推荐答案

您可以在模型中添加其他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

Django相关问答推荐

DRF中是否有有效的更新有序数据的算法?

Django-无法显示基于字段值的元素

通过父模型查询子对象-Django

通过在其他查询中使用来过滤对象

如何组织 Django REST Framework url

在Django Rest Framework中按模型属性排序时如何避免重新计算?

在 Django 模板中分页时如何正确显示与其父模型字段关联的所有内联字段?

组织大型 Django 元素的指南

如何让两个模型相互引用 Django

django 管理员登录突然要求 csrf 令牌

Django:在模板中显示当前语言环境

如何缓存 Django Rest Framework API 调用?

Django REST 异常

django - pisa:将图像添加到 PDF 输出

AngularJS + Django Rest Framework + CORS(CSRF Coo​​kie 没有出现在客户端)

ImportError:升级到 Django 4.0 后无法从 'django.conf.urls' 导入名称 'url'

Django 覆盖模型 Clean() 与 Save()

在 django admin 中链接到外键对象

Jinja2中的多级模板继承?

Django: Force强制 Select 相关?