Django RetrieveUpdateAPIView没有更新

时间:2017-08-04 15:16:24

标签: django django-models django-views django-rest-framework django-serializer

我正在使用django rest framework。
我有两个模型(Model1和Model2)。他们每个人都有:

  • 2个序列化器(Model1CreateSerializer,Model1DetailSerializer,Model2CreateSerializer,Model2DetailSerializer)。所有序列化程序都扩展了ModelSerializer。
  • 2个视图(Model1CreateView Model1DetailView,Model2CreateView,Model2DetailView)。所有“... CreateView”扩展CreateAPIView,所有“... DetailView”扩展 RetrieveUpdateAPIView

他们非常相似 第一个工作正常:我可以使用Model1CreateView创建Model1的istance,我可以使用Model1DetailView查看(GET)和补丁。 第二个不起作用:我可以使用Model2CreateView创建Model1的istance,我可以使用Model2DetailView看到(GET)。但是我无法更新信息。没有错误消息,也没有应用更新。

我已经尝试了一切。我从头开始在数据库中编写了一个新的模型,序列化程序,视图和表格,它仍然无法正常工作 我甚至减少了字段,只是在Model2中保留了一个Charfield字段,只是为了查看字段是否是导致问题的原因。

型号1

class Model1(models.Model):
    Field1 = models.CharField(max_length=255)
    Field2 = models.CharField(unique=True, max_length=10, blank=True, null=True)
    Field3 = models.SmallIntegerField()
    description = models.CharField(max_length=3000, blank=True, null=True)
    Field4 = models.SmallIntegerField()
    Field5 = models.ForeignKey('Foreignkey1', models.DO_NOTHING, db_column='Column1')

    class Meta:
        managed = False
        db_table = 'table1'

class Model1DetailView(RetrieveUpdateAPIView):

    serializer_class = Model2DetailSerializer
    lookup_field = 'id'
    lookup_url_kwarg = 'model1_id'
    #permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        return Model1.objects.all()


class Model1CreateView(CreateAPIView):
    serializer_class = Model1CreateSerializer

    def get_queryset(self):
        return Model1.objects.all()

class Model1CreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = ('field1', 'field2', 'field3', 'field4', 'field5')

class Model1DetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = ('field1', 'field2', 'field3', 'field4', 'field5')
        read_only_fields = ('field2')

模型2

class Model2(models.Model):
    field1 = models.CharField(max_length=255, blank = True)
    field2 = models.SmallIntegerField()
    field3 = models.CharField(max_length=3000, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'table2'

class Model2DetailView(RetrieveUpdateAPIView):
    serializer_class = Model2DetailSerializer
    lookup_field = 'id'
    lookup_url_kwarg = 'model2_id'

    def get_queryset(self):
        return Model2.objects.all()


class Model2CreateView(CreateAPIView):
    serializer_class = Model2CreateSerializer

    def get_queryset(self):
        return Model2.objects.all()


class Model2DetailView(RetrieveUpdateAPIView):

    serializer_class = Model2DetailSerializer
    lookup_field = 'id'
    lookup_url_kwarg = 'model2_id'

    def get_queryset(self):
        return Model2.objects.all()


class Model2CreateView(CreateAPIView):
    serializer_class = Model2CreateSerializer

    def get_queryset(self):
        return Model2.objects.all()

提前谢谢。

1 个答案:

答案 0 :(得分:0)

你能分享你的Model2DetailSerializer吗? 你的网址是对的吗?你可以在" get_queryset"中打印控制台输出吗?检查您是否实际使用具有正确URL的视图的方法?

此外,使用Django Rest Framework,您需要使用PUT / Patch请求而不是POST请求。