私は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()
事前にありがとうございます。