J'utilise django rest framework.
J'ai deux modèles (Model1 et Model2). Chacun d'eux a:Django RetrieveUpdateAPIView ne pas mettre à jour
- 2 serializers (Model1CreateSerializer, Model1DetailSerializer, Model2CreateSerializer, Model2DetailSerializer). Tous les sérialiseurs étendent ModelSerializer.
- 2 vues (Model1CreateView Model1DetailView, Model2CreateView, Model2DetailView). Toutes les "... CreateView" étendre CreateAPIView et tous les "... DetailView" étendre RetrieveUpdateAPIView
Ils sont très similaires.
Le premier fonctionne correctement: Je peux créer une istance de Model1 en utilisant le Model1CreateView et je peux voir (GET) et patcher cette istance en utilisant le Model1DetailView.
Le second ne fonctionne pas: je peux créer un istance de Model1 en utilisant le Model2CreateView et je peux voir (GET) cette istance en utilisant le Model2DetailView. Cependant je n'arrive pas à mettre à jour l'istance. Aucun message d'erreur et aucune mise à jour n'est appliquée.
J'ai tout essayé. J'ai écrit un nouveau modèle, Serializers, Views et table dans la base de données à partir de zéro et il ne fonctionne toujours pas.
J'ai même réduit les champs et j'ai juste gardé un seul champ Charfield dans Model2 juste pour voir si un champ était la cause du problème.
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')
Model2
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()
Merci à l'avance.