[PYTHON] Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)

Que ce soit bon ou non, il y a des moments où vous voulez accéder aux informations de vue à partir du sérialiseur. Nous utilisons un Mixin pratique qui peut être utilisé dans de tels cas en interne. Plus vous en faites, plus le lien entre View et Serializer est fort, nous vous recommandons donc de suivre l'utilisation et le dosage __.

Quoi qu'il en soit, c'est le code source.

ViewAccessSerializerMixin

class ViewAccessSerializerMixin(object):

    def get_view_action(self):
        """
Accéder à l'action Afficher à partir du sérialiseur
        """
        context = getattr(self, 'context')
        if not context:
            warnings.warn('Le contexte n'existe pas dans le sérialiseur. L'instance est créée de manière illégale')
            return None
        return context.get('view').action

    def get_view_kw(self, key, default=None):
        """
Accéder aux kwargs de vue depuis Serializer
        """
        context = getattr(self, 'context')
        if not context:
            warnings.warn('Le contexte n'existe pas dans le sérialiseur. L'instance est créée de manière illégale')
            return default
        return context.get('view').kwargs.get(key, default)

    def get_kwargs_object(self, key, model_class):
        """
Accédez aux kwargs depuis le sérialiseur, considérez-le comme un identifiant et recherchez le modèle spécifié
        """
        obj = model_class.objects.get_or_none(id=int(self.get_view_kw(key, 0)))
        if obj:
            return obj

Accéder à l'action de visualisation

Principalement utilisé dans validation. Je pense qu'il y a probablement de meilleures conditions. Comme ça.

class HogeSerializer(ViewAccessSerializerMixin, serializers.ModelSerializer):

    #Diverses omissions

    def validate(self, attrs):
        #Modifier le contenu de la vérification en fonction de l'action
        action_name = self.get_view_action()
        if action_name == "xxxx":
            pass
        else:
            pass

Accéder aux kwargs dans View

Principalement utilisé dans SerializerMethodField.

class PostHistorySerializer(ViewAccessSerializerMixin, serializers.ModelSerializer):

    #Diverses omissions

    comments = serializers.SerializerMethodField()

    def get_comments(self, obj):
        return obj.comment.filter(user_id=self.get_view_kw("user_pk"))

Accédez à kwargs dans View, considérez-le comme un identifiant et recherchez le modèle spécifié

C'est proche de la combinaison de ↑, mais c'est un raccourci.

class UserSerializer(ViewAccessSerializerMixin, serializers.ModelSerializer):

    #Diverses omissions

    def validate(self, attrs):
        user = self.get_kwargs_object('user_pk', models.User)
        if user.is_ban():
          raise NotFound()
        pass

En gros, je l'utilise comme ça. J'espère que vous pourrez l'utiliser facilement.

Recommended Posts

Parfois, vous souhaitez accéder aux informations de vue depuis Serializer avec DRF (Django REST Framework)
Lorsque vous souhaitez filtrer avec le framework Django REST
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
[Django] Utiliser MessagePack avec le framework Django REST
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Comment gérer les caractères déformés dans json de Django REST Framework
Créer une API RESTful avec Django Rest Framework
CRUD GET avec Nuxt & Django REST Framework ②
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
AssertNumQueries est utile si vous souhaitez tester facilement une requête N + 1 avec django
Si vous voulez créer un bot discord avec python, utilisons un framework
CRUD PUT, DELETE avec Nuxt & Django REST Framework
Passer les informations de connexion à afficher dans Django
Framework Django REST Un peu utile à savoir.
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Créer une application Todo avec Django REST Framework + Angular
Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Essayez de créer une application Todo avec le framework Django REST
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Liens pour faire ce que vous voulez avec Sublime Text
Passer des informations confidentielles de SSM à ECS avec CloudFormation
Vous permet de sélectionner par nom à partir du nom d'utilisateur Django
Choses à faire lorsque vous commencez à développer avec Django
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Accès ODBC à SQL Server depuis Linux avec Python