【问题标题】:Django DRF nested itemsDjango DRF 嵌套项目
【发布时间】:2018-01-23 18:35:21
【问题描述】:

我正在尝试从 POST 请求创建一组对象,在此我发送应创建的对象的 pk 列表:

data = { 'a_ref':["17629","17630","17631"] }
x= Model_Serializer(data=data)

这是我的序列化程序:

class A_Serializer(serializers.ModelSerializer):
    class Meta:
        model = A
        fields = ('pk',)

class Model_Serializer(serializers.ModelSerializer):
    a_ref = A_Serializer( many=True)


    def create(self, validated_data):
        tracks_data = validated_data.pop('a_ref')
        model = Model.objects.create(**validated_data)

        for track_data in tracks_data:
            A.objects.create(ref=model, **track_data)
        return model

    class Meta:
        model = models.Model

但我明白了:

[14]: x.is_valid()
Out[14]: False


x.errors
Out[16]: 
ReturnDict([
            ('a_ref',
             [{'non_field_errors': ['Invalid data. Expected a dictionary, but got str.']},
              {'non_field_errors': ['Invalid data. Expected a dictionary, but got str.']},
              {'non_field_errors': ['Invalid data. Expected a dictionary, but got str.']}])])

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

由于a_ref 是一个序列化程序,因此该字段要发送的数据应该是对象列表。就这样

data = {'a_ref':[
             {"pk": "17629"}, {"pk": "17630"},{"pk": "17631"}
        ]}

【讨论】:

    【解决方案2】:

    这行得通吗?

    for track_data in tracks_data:
        temp_dict = {'pk':track_data}
        A.objects.create(ref=model, **temp_dict)
    return model
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2020-11-15
      • 2014-04-07
      • 2020-08-31
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多