相关疑难解决方法(0)

Django Rest通过id更新了许多对

我是python和django休息的新手.但我很困惑.在django rest框架中更新多对多关系的最佳方法是什么.我阅读了文档 http://www.django-rest-framework.org/api-guide/relations/#manytomanyfields-with-a-through-model 默认情况下,设置以指定的直通模型为目标的ManyToManyField的关系字段只读.

如果使用直通模型显式指定指向ManyToManyField的关系字段,请确保将read_only设置为True.

所以,如果我有一个代码

class Master(models.Model):
    # other fields  
    skills = models.ManyToManyField(Skill)

class MasterSerializer(serializers.ModelSerializer):
    skills = SkillSerializer(many=True, read_only=False)
Run Code Online (Sandbox Code Playgroud)

这将返回作为对象列表的技能.我没有办法更新它们.据我所知,当涉及到M2M时,Django更喜欢使用对象和对象id.如果我使用yii或rails,我将使用"直通"模型.我想获得skill_ids字段.我可以读写.我可以这样做写操作

class MasterSerializer(serializers.ModelSerializer):
    skill_ids = serializers.ListField(write_only=True)

    def update(self, instance, validated_data):

    # ...
    validated_data['skill_ids'] = filter(None, validated_data['skill_ids'])
    for skill_id in validated_data['skill_ids']:
        skill = Skill.objects.get(pk=skill_id)
        instance.skills.add(skill)

    return instance
Run Code Online (Sandbox Code Playgroud)

但我不能让它返回技能领域.并为读写操作工作.

python django django-rest-framework

13
推荐指数
1
解决办法
7762
查看次数

标签 统计

django ×1

django-rest-framework ×1

python ×1