J'ai actuellement la structure suivante dans mon API DRF.Django Rest DRF - Méthode Post utilisant des vues basées sur une classe générique (CreateAPIView) lorsqu'il existe une relation de clé étrangère
models.py
class Location(models.Model):
name = models.CharField(max_length=64, unique=True)
district = models.CharField(max_length=64, blank=True)
division = models.CharField(max_length=64, blank=True)
latitude = models.DecimalField(max_digits=9, decimal_places=3, blank=True)
longitude = models.DecimalField(max_digits=9, decimal_places=3, blank=True)
class Event(models.Model):
title = models.CharField(max_length=64)
location = models.ForeignKey(Location, on_delete=models.CASCADE, blank=False, null=False)
type = models.CharField(max_length=64, blank=True)
max_quota = models.IntegerField(blank=True)
min_cost = models.IntegerField(blank=True)
duration_start = models.CharField(max_length=64, blank=True)
duration_end = models.CharField(max_length=64, blank=True)
serializers.py
class LocationSerializer(serializers.ModelSerializer):
class Meta:
model = Location
fields = ['name', 'district', 'division', 'latitude', 'longitude', ]
class ExperienceCreateSerializer(serializers.ModelSerializer):
location = LocationSerializer(many=False)
#location_id = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = Experience
fields = ['title', 'type', 'max_quota', 'min_cost', 'duration_start', 'duration_end', 'location', ]
views.py
class ExperienceCreate(generics.CreateAPIView):
queryset = Experience.objects.all()
serializer_class = ExperienceCreateSerializer
Mes recevoir des demandes fonctionnent très bien, mais quand je veux POST aux modèles d'événements , alors je reçois toujours une sorte d'erreur. J'ai essayé pas mal de choses, y compris en remplaçant la méthode create, j'ai aussi essayé d'utiliser le primarykeyfield. Le problème réside dans la référence de la clé étrangère de localisation dans le modèle d'événement et dans les sérialiseurs. J'ai essayé quelques autres choses à part ça mais la seule solution logique était de surcharger la méthode create(). Mais, rien n'a fonctionné. Je ne comprends pas exactement où je vais mal.
vous montrer la version de 'create()' –
J'ai posé la même question avant. Je pense que vous trouverez ceci utile: https://stackoverflow.com/questions/41312558/django-rest-framework-post-nested-objects – wencakisa
'code def créer (self, validated_data):' 'code loc_data = validated_data. pop ('location') ' ' code exp = Expérience.objects.create (** validated_data) ' ' code Experience.objects.create (emplacement = loc_data, ** données_de_piste) ' ' code return exp ' – flaire