Λύθηκε: Πώς να χρησιμοποιήσετε το άγκιστρο %22to_representation%22 για σειριοποιητές django rest

Το κύριο πρόβλημα είναι ότι το άγκιστρο %22to_representation%22 δεν εφαρμόζεται στους σειριακούς django rest.

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                        { | } ~ ⌂ ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£áíóúñѪº¿®¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞═══════════════════ ══ ══ ══ ══ ══ ══ ══ ─ ─ ─ ─ ─ ─ ─ ─ ┤ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ ├──────────── ├──────────────────────── ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ██ ██ ██ ██ ██ ██ ██ ███▀▀▀██▄▄▄██████▀▀▀██████▄▄██████████████████████████████████████████████▀▀██████▄▄██████▀▀██████▄

▄██████████████████████████████████████▀▀██████▄▄█ █████▀▀██████▄▄█████████ ██ ██ ██ ██ ██ ██ ██ ▀██ ▄██▀ ▀██ ▄█ █▀ ▀██ ▄██▀ ▀▌▐▌▐▌▐▌│││││║║║║╔═════════════════ ══ ══ ══ ══ ══ ─ ─ ─ ┤ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├─ │ ├────────────────░▒▒ ▒▒▓▓▓▓▒▒▒▒░ΠΛΗΡΙΣΤΙΚΗ ☺/ ☻/ ☺/ ☻/ ☺/ | |` `| |` `| |` `| |` `| |` `| |, ,, ,, ,, ,, ,,,_,,_,,,,,_,,,,,,,,_,,,,,,,, ,,,,,___,,,,__ __ _ _ __ ___ (_) ___ ___ _____ _____ _ __ ___ _ ___ __ __ ______ ______ ______ ______ / / / \ \ \ \ '__/ _| |/| / __|| ____|| ____|| ____|| ____|| // ||___ ||___ ||___ ||___ || //\//\//\//\//\//\\///\\///\///\\///\\/\\\\\///// \\\\////\\\\////\\\\////\\\////\\\\\\\\\\\\\\\\/// \\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////\\\\\////////////////////\\\\\//////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ////////////////////^ ^ ^ ^ ^ ^ ^ ^ ^^^^ vvv vvv vvv vvv vvv^^^^^^^^^^^^^ ^^^^^^ <<<<<<<<>>>>>;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;:::::::::::::::::::::::::::::::""" ”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””“ )))))))))))))))|||||||||||||||||| }}}}~~~~~~~~~~~~~~~~““““““`,~~~.~“~“~~.~“~“~~.~“~“ ~~.~“~“~~.~~~~~~——–…——–…——–…——–…——–………———…———………—— —………—————–……………..—————–…………… ..—————–……………..———————————-…………………………………………………….——————— —————-……………………………………………………….———————————-……………………………………………… ……….———————————————————————————————————————————— —————————————————————————————————————–…………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………………… ……………………………………………………………………………. . . . . . .. .. .. .. .... .... .... .... …………………………………….. .......... .......... …………………………….. .......... .......... ……………………………………………………………………………………………………………….. ............ .. ............ .. ............ .. ...................... ...................... ...................... ...................... ............... .. ............... .. ............... .. ............... .. .......... .......... .......... .......... ……………………………………….. ... .. ... .. ... .. ……………. . . . <<<” ” ” ” ” &; &; &; { { { { } } } [ [ [ [ ] ] ] ~ ~ ' ' # # $ $ % % &” ” '( ) * + ./ 0 1 2 3 4 5 6 7 8 9 ; <“= ?
Ο κώδικας προσπαθεί να προσθέσει ένα πεδίο που ονομάζεται "full_name" στο UserSerializer που δεν αποτελεί μέρος του μοντέλου. Αυτό το κάνει παρακάμπτοντας τη μέθοδο get_fields() και προσθέτοντας το πεδίο full_name στο λεξικό πεδίων.

Serializer υπόλοιπες λέξεις πλαισίων

Οι σειριοποιητές είναι μια κατηγορία αντικειμένων που μπορούν να χρησιμοποιηθούν για τη διατήρηση δεδομένων σε ένα μοντέλο. Οι σειριοποιητές μπορούν να χρησιμοποιηθούν για τη μετατροπή δεδομένων σε μορφή που μπορεί να αποθηκευτεί σε μια βάση δεδομένων.

Τι είναι τα αγκίστρια στο Django

Ένα άγκιστρο είναι μια λειτουργία στο Django που σας επιτρέπει να εκτελείτε κώδικα σε ορισμένα σημεία της επεξεργασίας ενός αιτήματος. Τα άγκιστρα είναι χρήσιμα για την εκτέλεση προσαρμοσμένης επεξεργασίας σε εισερχόμενα αιτήματα ή για το χειρισμό συγκεκριμένων καταστάσεων που μπορεί να προκύψουν.

Σχετικές αναρτήσεις:

Αφήστε ένα σχόλιο