0
votes

ModelSerializer a requis les données de champ de l'instance

J'ai le sérialiseur suivant:

...
track_group = TrackGroup(report=report)
serializer = TrackGroupSerializer(
    instance=track_group,
    context=dict(request=request),
    data=request.data
)

if serializer.is_valid():
    ...

Je prends l'identifiant de rapport de l'URL, donc je pense que cela fonctionnera:

class TrackGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = TrackGroup
        fields = ('id', 'name', 'report', 'tracks')  # `report` is FK

Cela ne fonctionne pas car le sérialiseur a une erreur pour le champ rapport car le champ est manquant et obligatoire. Quelle est la bonne façon de fournir des données telles que rapport et de les conserver dans les champs TrackGroupSerializer car ce sérialiseur est utilisé pour renvoyer toutes les données en réponse.

Merci


0 commentaires

3 Réponses :


1
votes

Définissez le drapeau requis sur FALSE STRY> dans le sérialiseur modèle

class TrackGroup(models.Model):
    report  = models.CharField(default = '-')


0 commentaires

1
votes

Vous pouvez définir les données sous forme de dict avec toutes les clés et non comme données de demande comme ceci

data = {'report': report.id, **request.data}

serializer = TrackGroupSerializer(
    instance=track_group,
    context=dict(request=request),
    data=data
)


0 commentaires

0
votes

La bonne solution semble être partial=True:

serializer = TrackGroupSerializer(
    instance=track_group,
    context=dict(request=request),
    data=request.data,
    partial=True
)

Cela semble être plus propre que de modifier les données de la requête.


0 commentaires