Pass-Antrag Kontext zu serializer aus Viewset in Django Rest Framework
Habe ich einen Fall, wo die Werte für einen serializer Feldes hängen von der Identität des aktuell angemeldeten Benutzers. Ich habe gesehen, wie Sie den Benutzer hinzufügen, um den Kontext bei der Initialisierung ein serializer, aber ich bin nicht sicher, wie Sie dies tun, wenn mit einem ViewSet, wie Sie nur der Versorgung der serializer-Klasse und nicht die tatsächliche serializer Instanz.
Grundsätzlich würde ich gerne wissen, wie man von:
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
:
class myModelSerializer(serializers.ModelSerializer):
uploaded_by = serializers.SerializerMethodField()
special_field = serializers.SerializerMethodField()
class Meta:
model = myModel
def get_special_field(self, obj):
if self.context['request'].user.has_perm('something.add_something'):
return something
Sorry wenn es nicht klar aus der Dokumentation:
Das Hinzufügen Von Zusätzlichen Kontext
Was sagt
serializer = AccountSerializer(account, context={'request': request})
serializer.data
Aber ich bin nicht sicher, wie zu tun, die automatisch von der viewset, wie ich nur kann, ändern Sie die serializer-Klasse, und nicht die serializer-Instanz selbst.
InformationsquelleAutor der Frage oowowaee | 2015-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
GenericViewSet
hat dieget_serializer_context
Methode, die Sie überschreiben können:InformationsquelleAutor der Antwort Syslo
Zurück übergeordneten Kontext, in overrided Funktion
get_serializer_context
machen es leicht zu access-request und seine Daten.Dieser ist sehr stabil, wie jedes mal, wenn wir verlangen viewset, es gibt Kontext.
InformationsquelleAutor der Antwort Shashank
Dies ist, wie ich mit solchen Fällen in meiner ModelViewSet:
InformationsquelleAutor der Antwort ostergaard
verwenden Sie einfach get_serializer() in der viewsets
InformationsquelleAutor der Antwort steven.yan