Django Rest Framework在运行验证后将相关对象列表转换为空白列表

时间:2015-11-05 18:59:11

标签: python django django-rest-framework

我正在尝试在django rest框架中创建子对象时创建相关或父对象的列表。

My Models are like this  

class Model2(models.Model):
    model1 = models.ForeignKey(Model1)
    name = models.CharField(max_length=100)
    display_name = models.CharField(max_length=100)

class Model3(models.Model):
    model1 = models.ForeignKey(Model1)
    kind = models.ForeignKey(Kind)
    model2 = models.ForeignKey(Model2)

和我的Serializer类是:

class Model2Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model2

class Model3Serializer(serializers.ModelSerializer):
    model2 = Model2Serializer(many=True)
class Meta:
    model = Model3
    fields = ('model1', 'model2')

我的观点如下:

class Model3View(generics.CreateAPIView):  
    serializer_class = Model3Serializer
    queryset = Model3.objects.all()

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # self.perform_create(serializer)
        print serializer.data
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

我在字段名称model2中发送对象列表。

request.data中的

model2字段就像

[
    {
        "name":"abcde",
        "display_name":"ghvhgvhg",
        "model1":1
    },
    {
        "name":"abcde", 
        "display_name":"ghvhgvhg",
        "model1":1
    }
]

但是当我在检查serializer.is_valid()后打印serializer.data时,它会在serailizer.data中显示model2:[]。

为什么在对数据执行验证时我的数据会丢失?

1 个答案:

答案 0 :(得分:0)

这是因为您的Model3只能包含Model2的一个实例,Model2可以指向Model3

的许多实例

因此,您的字段model2 = Model2Serializer(many=True)是错误的,因为Model3实例永远不会有Model2"

的许多实例