2016-05-19 14 views
1

Ich muss einige spezielle Serialisierung/Deserialisierung mit DRF ausführen, aber einer der erforderlichen Parameter für diese ist der Benutzer, der die Abfrage generiert hat.So fügen Sie ein statisches Benutzerfeld zur Django-Abfrage hinzu

AFAIK eine serializers.Field Instanz hat keinen Zugriff auf ViewSet und somit keinen Zugriff auf ViewSet.request.user.

Also dachte ich, ich würde einfach den Benutzer als ein statisches Feld in die Abfrage setzen, so dass jeder Datensatz Zugriff darauf hätte.

qry = qry.annotate(user=Value(user, models.ForeignKey(settings.AUTH_USER_MODEL))) 

aber das gibt mir

ValueError: Related model 'auth.User' cannot be resolved 

Ich habe auch versucht

q.annotate(user=Value(user, models.ForeignKey(user.__class__))) 

aber, dass auch excepts.

Genau was muss ich einbeziehen, damit dies bei Bedarf behoben wird?

Antwort

2

Werfen Sie einen Blick auf die CurrentUserDefault:

eine Standard-Klasse, die verwendet werden können, den aktuellen Benutzer zu vertreten. Um dies zu verwenden, muss die 'request' als Teil des Kontextwörterbuchs bereitgestellt worden sein, wenn die serializer instanziiert wird.

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault() 
) 

Um dies zu nutzen, müssen Sie pass the request in the context, wie folgend:

serializer = AccountSerializer(account, context={'request': request}) 
+0

Eigentlich das funktioniert für mich aus dem Kasten heraus. 'self.context ['request']. user' in' Field.to_representation' – velis

Verwandte Themen