Dynamiquement modifier sérialiseur champs dans Django Repos Cadre
Je suis en train d'utiliser les Avancées sérialiseur utilisation décrites dans le django de repos cadre de la documentation. http://django-rest-framework.org/api-guide/serializers.html#advanced-serializer-usage dynamiquement modifier sérialiseur champ
Voici mon sérialiseur classe:
class MovieSerializer(serializers.ModelSerializer):
moviework_work = MovieWorkSerializer(many=True)
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
dropfields = kwargs.pop('dropfields', None)
# Instantiate the superclass normally
super(MovieSerializer, self).__init__(*args, **kwargs)
if dropfields:
# Drop fields specified in the `fields` argument.
banished = set(dropfields)
for field_name in banished:
self.fields.pop(field_name)
class Meta:
model = Movie
fields = ('field1','field2','moviework_work')
Voici mon viewset
class MovieFromInterpreterViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer(dropfields=('moviework_work',))
J'obtiens cette erreur:
TypeError: 'MovieSerializer' object is not callable
Le lien avancé sérialiseur-utilisation ci-dessus renvoie une erreur 404. Voici la mise à jour du lien: django-rest-framework.org/api-guide/serializers/...
OriginalL'auteur Papa Sax | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Note que vous êtes réglage
serializer_class
pas à une classe, mais à une instance de la classe. Vous devez définirdropfields
comme un attribut de la classe, (comme il le fait pourfields
dans l'exemple documenté vous lien) ou vous avez besoin de regarder substitution de laget_serializer
méthode de la viewset (docs).serializer_class
n'est pas une classe mais je ne comprends pas cette réponse étant donné que les liens semble être dépassé. Pouvez-vous mettre à jour les liens? ou de donner un exemple d'assister à la question posté?OriginalL'auteur benspaulding