Django-rest-framework: TypeError: set_context() fehlt 1 erforderliches Positionsargument: 'serializer_field'

Erstellt am 24. Juni 2019  ·  3Kommentare  ·  Quelle: encode/django-rest-framework

Checkliste

  • [ ] Ich habe überprüft, dass dieses Problem für den master Zweig des Django REST-Frameworks besteht.
  • [ ] Ich habe sowohl in offenen als auch in geschlossenen Tickets nach ähnlichen Problemen gesucht und kann kein Duplikat finden.
  • [ ] Dies ist keine Verwendungsfrage. (Diese sollten stattdessen an die Diskussionsgruppe weitergeleitet werden.)
  • [ ] Dies kann nicht als Fremdbibliothek behandelt werden. (Wir bevorzugen, wenn möglich, neue Funktionen in Form von Bibliotheken von Drittanbietern .)
  • [ ] Ich habe das Thema auf den einfachsten Fall reduziert.
  • [ ] Ich habe einen fehlgeschlagenen Test als Pull-Request eingefügt. (Wenn Sie dazu nicht in der Lage sind, können wir das Problem trotzdem annehmen.)

Schritte zum Reproduzieren

Klasse GraphDomainSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(default=serializers.CurrentUserDefault)

Erwartetes Verhalten

Tatsächliches Verhalten

Klasse CurrentUserDefault(Objekt):
def set_context(self, serializer_field):
self.user = serializer_field.context['request'].user

def __call__(self):
    return self.user

def __repr__(self):
    return unicode_to_repr('%s()' % self.__class__.__name__)

def get_default(self):
"""
Gibt den Standardwert zurück, der beim Validieren von Daten verwendet werden soll, wenn keine Eingabe erfolgt
ist für dieses Feld vorgesehen.

    If a default has not been set for this field then this will simply
    raise `SkipField`, indicating that no value should be set in the
    validated data for this field.
    """
    if self.default is empty or getattr(self.root, 'partial', False):
        # No default, or this is a partial update.
        raise SkipField()
    if callable(self.default):
        if hasattr(self.default, 'set_context'):
            **self.default.set_context(self)**
        return self.default()
    return self.default

Datei "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py", Zeile 490, in get_default
self.default.set_context(self)
TypeError: set_context() fehlt 1 erforderliches Positionsargument: 'serializer_field'
[24.06.2019 14:34:45] "POST /graphs/ HTTP/1.1" 500 21130

Hilfreichster Kommentar

Der Standardwert sollte eine Instanz sein, keine Klasse: serializers.CurrentUserDefault() wie in der Dokumentation gezeigt

Alle 3 Kommentare

Der Standardwert sollte eine Instanz sein, keine Klasse: serializers.CurrentUserDefault() wie in der Dokumentation gezeigt

Der Standardwert sollte eine Instanz sein, keine Klasse: serializers.CurrentUserDefault() wie in der Dokumentation gezeigt

es hat das problem gelöst

Der Standardwert sollte eine Instanz sein, keine Klasse: serializers.CurrentUserDefault() wie in der Dokumentation gezeigt

Danke,Sie haben mir geholfen, dieses Problem zu lösen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen