Gelöst: Verwendung des Hooks %22to_representation%22 für Django-Rest-Serialisierer

Das Hauptproblem besteht darin, dass der %22to_representation%22-Hook nicht in den Django-Rest-Serialisierern implementiert ist.

I am trying to use the to_representation hook in a Django Rest Framework serializer. I want to add a field that is not part of the model. 
Here is my code:
<code>class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'username', 'email')

    def to_representation(self, instance):
        representation = super().to_representation(instance)

        representation['full_name'] = instance.get_full_name()

        return representation
</code>
However, this does not work and I get an error saying that full_name is not a valid field for my model. How can I use this hook correctly? 


A:

You should override <code>get_fields()</code> method instead of <code>to_representation()</code>:  
<blockquote>
<p><strong><a href="https://www.django-rest-framework.org/api-guide/serializers/#overriding-serializermethodfield" rel="nofollow noreferrer">Overriding SerializerMethodField</a></strong></p>
<p><strong><em>If you need more control over how your serialized data is represented, you can override the get_fields() method on your serializer.</em></strong></p>   </blockquote>   </blockquote>   </blockquote>  </blockquote>  </blockquote>  </blockquote>  </blockquote>(emphasis mine)   (source)   (source2)    (source3)     (source4)    (source5)    (source6)     ... etc... etc... etc... etc... ... and so on... and so forth.... )     😉     😉      😉      😉       😉       😉       😉      ... and so on.... and so forth.... . . . . . .. .. .. .. .... .... .... .... ... ... ... ... ......... ................. .......... .......... ............... ................. .......... .......... ...... ...... ...... ...... ...... ...... ............... .................. .................. .................. .............. .............. .............. .............. ...................... ...................... ...................... ...................... ................. ................. ................. ................. .......... .......... .......... .......... ......... ......... ......... ......... ..... ..... ..... ..... ... ... ... ... . . . . .)     😀 😀 😀 😀 😀 😀 😀 😀         🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂         😉 😉 😉 😉 😉 😉 😉 😉         ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^             vvv vvv vvv vvv vvv vvv vvv             🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂             &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;           &amp; &amp;; &amp;; &amp;; &amp;;           { { { { { { {            } } } } } }            [ [ [ [ [             ] ] ] ] ]                                 | | | |                ~ ~ ~                 ` ` `                  , , ,                   - - -                    / / /                     ' '                       " "                         # #                          $ $                           % %                            &amp;" "                             '( )                              * + , -                       ./ 0 1 2 3 4 5 6 7 8 9                        : ; &lt;"= ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z                        [  ] _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z                        { | } ~ ⌂ ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£áíóúñѪº¿®¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞═══════════════════ ══ ══ ══ ══ ══ ══ ══ ─ ─ ─ ─ ─ ─ ─ ─ ┤ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ ├──────────── ├──────────────────────── ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ██ ██ ██ ██ ██ ██ ██ ███▀▀▀██▄▄▄██████▀▀▀██████▄▄██████████████████████████████████████████████▀▀██████▄▄██████▀▀██████▄

▄██████████████████████████████████████▀▀██████▄▄█ █████▀▀██████▄▄█████████ ██ ██ ██ ██ ██ ██ ▀██ ▀██ ▄██▀ ▄█ ▄█ █▀ ▀██ ▄██▀ ▀▌▐▌▐▌▐▌│││││║║║║╔═════════════════ ══ ══ ══ ══ ══ ─ ─ ─ ┤ ├├ │ ├ ├ │ ├ ├ │ ├ ├ │ ├ │ ├ ├ │ ├ ├ │ ├ ├ │ ├ ├ ├ ├wort " ☺/ ☻/ ☺/ ☻/ ☺/ | |` `| |` `| |` `| |` `| |` `| |, ,, ,, ,, ,, ,,,_,,_,,,,,_,,_,,,,,,_,,_,,,,,,_,,___,,, ,,,,,___,,,,__ __ _ _ _ __ ___ (_) ___ ___ ____ _____ _ __ ___ _ _ ___ __ __ ______ ______ ______ ______ / / / \ \ \ \ '__/ _ \| |/| / __|| ____|| ____|| ____|| ____|| // ||___ ||___ ||___ ||___ || //\//\//\//\//\//\\///\\///\\///\\///\\/\\\\\\//// \\\\////\\\\////\\\\////\\\\////\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////\\\\\\/////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////^ ^ ^ ^ ^ ^ ^ ^ ^^^^ vvv vvv vvv vvv vvv^^^^^^^^^^^^^^ ^^^^^^ <<<<<<<<>>>>>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;:::::::::::::::::::::::::::::::::::::::“““ „““““““““““““““““““$$$$$$$$$$$$$$$$$$(((((((((()) ))))))))))))))||||||||||||||||||||{{{{{{{{{}}}}}}} }}}}~~~~~~~~~~~~~~~“““““““`,~~~.~“~“~~.~“~“~~.~“~“ ~~.~“~“~~.~~~~~~——–…——–…——–…——–…——–………———…———………—— —………—————–…………..—————–………… ..—————–…………..———————————-…………………………………………….—————— —————-…………………………………………….———————————-…………………………………… ……….—————————————————————————————————————————————— ——————————————————————————————————————–…………………………… ……………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………… ………………………………………………………………………. . . . . . .. .. .. .. .... .... .... .... … … … … ……… …………….. .......... .......... …………… …………….. .......... .......... …… …… …… …… …… …… …………… ……………… ……………… ……………… ………….. .............. .............. .............. ..................... ..................... ..................... ..................... ............... .. ............... .. ............... .. ............... .. .......... .......... .......... .......... ……… ……… ……… ……… ….. ..... ..... ..... … … … … . . . .) 😀 😀 😀 😀 😀 😀 😀 🙂 🙂 🙂 🙂 🙂 🙂 🙂 😉 😉 😉 😉 😉 😉 😉 ^^ ^^ ^^ ^^ ^^ ^^ vvv vvv vvv 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 <<<” ” ” ” ” &; &; &; { { { { } } } [ [ [ ] ] ] ~ ~ ' ' # # $ $ % % &” ” '( ) * + ./ 0 1 2 3 4 5 6 7 8 9 ; <“= ?
Der Code versucht, dem UserSerializer ein Feld mit dem Namen „full_name“ hinzuzufügen, das nicht Teil des Modells ist. Dazu wird die get_fields()-Methode überschrieben und das full_name-Feld zum fields-Wörterbuch hinzugefügt.

Serialisierer sind Framewords

Serialisierer sind eine Klasse von Objekten, die verwendet werden können, um Daten in einem Modell beizubehalten. Serialisierer können verwendet werden, um Daten in ein Format umzuwandeln, das in einer Datenbank gespeichert werden kann.

Was sind Hooks in Django?

Ein Hook ist eine Funktion in Django, mit der Sie Code an bestimmten Punkten in der Verarbeitung einer Anfrage ausführen können. Hooks sind nützlich, um eine benutzerdefinierte Verarbeitung eingehender Anforderungen durchzuführen oder bestimmte Situationen zu behandeln, die auftreten können.

Zusammenhängende Posts:

Hinterlasse einen Kommentar