Zugriff auf Benutzerobjekte im Django Djoser Token Serializer

dnmh

Ich habe folgendes in den Einstellungen:

DJOSER = {
    'SERIALIZERS': {
        'token': 'api.api.MyTokenSerializer'
    }
}

Und hier ist der Serializer, der für die Anmeldung verwendet wird:

class MyTokenSerializer(TokenSerializer):
    auth_token = serializers.CharField(source="key")
    registration_complete = serializers.BooleanField(source="user.registration_complete", read_only=True)
    app_mode = serializers.CharField(source="user.app_mode", read_only=True)

    class Meta:
        model = djoser_settings.TOKEN_MODEL
        fields = ("auth_token", "profile_complete", "app_mode")

und jetzt muss ich noch ein Feld hinzufügen, aber dieses Feld ist ein Methodenfeld und es braucht das userObjekt.

Im Pseudocode:

class MyTokenSerializer(TokenSerializer):
    ...
    new_field = my_method(user_object)

    ...

Ich verstehe jedoch nicht, wie ich auf das Benutzerobjekt in diesem Serializer zugreifen soll. Ich sehe, dass das userObjekt in zwei Feldern ( registration_completeund app_mode) als Quelle verwendet wird, aber ich weiß nicht, wie ich direkt darauf zugreifen soll, um es an die Methode zu übergeben. Kann userhier auf das Objekt zugegriffen werden?

frankie567

Was Sie brauchen ist ein SerializerMethodField:

Dies ist ein schreibgeschütztes Feld. Es erhält seinen Wert durch Aufrufen einer Methode für die Serializer-Klasse, an die es angehängt ist.

Diese Methode nimmt den Parameter des zu serialisierenden Objekts auf. In Ihrem Fall ist es ein djoser_settings.TOKEN_MODEL( was standardmäßig istrest_framework.authtoken.models.Token ).

Wenn Sie sich die Implementierung dieses Modells ansehen , werden Sie feststellen, dass ein Fremdschlüssel auf den Benutzer verweist. Das ist der Grund, warum Sie Dinge tun können wie source=user.registration_complete( sourceist eigentlich eine praktische Verknüpfung zum Serialisieren von Feldern in Fremdobjekten).

Sie können also so etwas tun:

class MyTokenSerializer(TokenSerializer):
    new_field = serializers.SerializerMethodField()

    def get_new_field(self, obj):
        # "obj" is a Token object
        user = obj.user

        # Return the value you want
        return f'Hello {user.email}'

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Django beschränkt den Zugriff auf Benutzerobjekte

Django-Zugriff auf verschachteltes Objektfeld im Serializer

Aktualisieren eines Werts im Serializer nach dem Zugriff auf .data in Django Rest Framework

Firebase iOS - Zugriff auf Benutzerobjekte von einem anderen Ansichtscontroller aus

Zugriff auf Serializer-Instanzen im Feld des verschachtelten Serializers

Django REST Framework Serializer - Zugriff auf vorhandenen Fremdschlüssel

Zugriff auf Anforderungsobjekt in Viewset und Serializer in Django Rest Framework?

Zugriff auf im Container gespeichertes Token nicht möglich

Zugriff auf URL ohne Token im Firebase-Speicher

Zugriff auf die angegebene Datenbank im Migrationsbefehl django im Datenbankrouter

Spartacus - Zugriff auf Benutzerobjekte von der PDP-Seite von Spartacus?

Django Djoser Token-Authentifizierung funktioniert nicht

Django ModelForm - Zugriff auf benutzerdefiniertes Feld im Formular gültig

Django - Zugriff auf Fremdschlüsselwerte zum Speichern im Wörterbuch

Django Rest Framework mit Djoser Token Authentication Token Antwort

Der Wert des Django-Serializer-Felds basiert auf einem anderen Feld im selben Serializer

Django Rest Framework: Zugriff auf den Primärschlüssel des Felds in serializer.is_valid -> serializer.errors

Django - Benutzerobjekte nach Feld vergleichen

Django DetailView Zugriff auf Benutzer im M2M-Feld, um den Zugriff einzuschränken?

Zugriff auf Token und Antwortdaten

Zugriff auf Anforderungsparameter django

Django: Zugriff auf Modellinstanzen

Zugriff auf Funktionen im Fensterobjekt

Zugriff auf Angular im Winkelmessertest

Zugriff auf Parametertypen im Funktionstyp

Zugriff auf Requisiten im Reaktionskonstruktor

Zugriff auf IConfiguration im Testskript

Zugriff auf Variablen im Transformator

Summen Daten im Serializer Django

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv