Je le modèle suivant:sérialisation relations génériques avec Django Rest-cadre, avec le soutien d'écriture
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
Je suis en train de sérialisation ce modèle d'une manière que je peux affecter l'objet de contenu via un point de terminaison API
jusqu'à présent, je l'ai fait ceci:
class TaggedItemSerializer(serializers.ModelSerializer):
content_object = serializers.RelatedField(read_only=True)
class Meta:
model = TaggedItem
Toutefois, c'est en lecture seule. Si je supprime le paramètre read_only, je dois spécifier le jeu de requête pour le champ. Cependant, j'ai beaucoup de types de modèles différents pour cette relation générique. Il semble que je duplique du code si je spécifie tous les types de modèles possibles à la fois dans le sérialiseur et ailleurs dans le modèle.
Je pourrais également définir l'objet de contenu à travers les champs object_id et content_type, mais quand je fais cela, je reçois une erreur.
Par exemple:
{
...
object_id: 1,
content_type: 'auth.User'
}
renvoie une réponse 400 avec "detail": "JSON parse error - Expected object or value"
Comment puis-je faire ce content_object inscriptible via le api DRF?