Django Rest - Créer et mettre un objet avec un clé étrangère
Bonjour
Je voudrais créer des API avec django REST Framework
Je veux faire une API qui retourne des offres. Une offre a un statut avec un code et un libellé
J'ai créé un model pour les statuts et un pour les offres avec une clé étrangère vers les statuts
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class Status(models.Model):
code = models.CharField(max_length=5, unique=True)
Label = models.CharField(max_length=128)
class Offers(models.Model):
appelation = models.CharField(max_length=256)
year = models.IntegerField()
typeOffer = models.CharField(_("type"), max_length=128)
volume = models.FloatField()
price = models.FloatField()
location = models.CharField(max_length=256)
status = models.ForeignKey(Status, related_name='statut', on_delete=models.DO_NOTHING) |
J'ai créé deux serializers
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class StatusSerializer(serializers.ModelSerializer):
class Meta:
model = Status
fields = ("__all__")
class OfferSerialzer(serializers.ModelSerializer):
status = StatusSerializer()
class Meta:
model = Offers
fields = ('id','appelation','year','typeOffer','volume','price','location','status') |
Quand j'exécute mon API ("http://localhost:8000/offers/") pour retrouver mes offres, j'obtiens ceci et qui me va très bien (car ça permet à mon front en React d'avoir toutes les infos)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
[
{
"id": 1,
"appelation": "Chénas",
"year": 1950,
"typeOffer": "Vrac",
"volume": 130.0,
"price": 2600.0,
"location": "Grenot",
"status": {
"id": 1,
"code": "WAIT",
"Label": "En attente de validation"
}
}
] |
Je ne sais comment faire pour créer ne nouvelle offre en faisant référence à un statut existant. Quand je créé une offre, elle doit avoir un statut par défaut
Comment faire aussi quand je vais vouloir mettre à jour le statut de mon offre
Quand je vais appeler mon api "http://localhost:8000/offers/" en POST, est ce que je dois lui passer l'id d'un statut ? Si oui, faut-il modifier mon serializer pour ajouter l'ID du statut ?
Merci pour votre aide