0

私はdjango restフレームワークを使用しています。
私は2つのモデル(Model1とModel2)を持っています。それらのそれぞれが持っている:Django RetrieveUpdateAPI更新しないビュー

  • 2つのシリアライザ(Model1CreateSerializer、Model1DetailSerializer、Model2CreateSerializer、Model2DetailSerializer)。すべてのシリアライザは、ModelSerializerを拡張します。
  • 2ビュー(Model1CreateView Model1DetailView、Model2CreateView、Model2DetailView)。すべての "... CREATEVIEWは" CreateAPIViewを拡張し、すべての "... DetailViewは、" 彼らは非常によく似てい

RetrieveUpdateAPIViewを拡張します。
最初のものは正常に動作しています.Model1CreateViewを使用してModel1のアイシャンスを作成することができ、Model1DetailViewを使用してそのアイデアを表示(GET)して修正できます。
2つ目は動作しません。Model2CreateViewを使用してModel1のアイシャンスを作成でき、Model2DetailViewを使用してそのアイデアを見ることができます(GET)。しかし、私は義務を更新することはできません。エラーメッセージはなく、更新も適用されません。

私はすべてを試しました。新しいモデル、シリアライザ、ビュー、テーブルをゼロからデータベースに書きましたが、まだ動作していません。
私はフィールドを減らして、フィールドが問題の原因であるかどうかを確認するために、ただ1つのCharfield FieldをModel2に保持しました。

MODEL1

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() 

事前にありがとうございます。

答えて

0

Model2DetailSerializerを共有できますか? あなたのURLは正しいですか? 「get_queryset」メソッドでコンソール出力を出力して、実際に正しいURLでビューを使用していることを確認できますか?

また、Django Rest Frameworkでは、POST要求ではなくPUT/Patch要求を使用する必要があります。

関連する問題