0
votes

QuerySets sur les vues ou sur les gestionnaires de modèles Django

Il y a quelques jours, un gars m'a expliqué que sur Ruby sur des rails les requêtes sont effectuées sur des modèles. Parce qu'il est déjà enregistré à vos données avant de être demandée sur les vues et la requête.

Au fait, j'ai appris et je travaillais jusqu'à présent, je définit la requête sur Views.py et en passant, à travers une variable de contexte. J'ai donc commencé à lire sur Model.Manager et je n'ai toujours pas trouvé de réponse à laquelle est le meilleur:

  1. Queries faites sur Vues
  2. Queries fabriquées par des fonctions simples sur les modèles
  3. Queries fabriquées sur des modèles.Le classe de Ganager pour chaque modèle

0 commentaires

4 Réponses :


1
votes

Chaque modèle est associé à un gestionnaire (par défaut est objets ) xxx

lorsque vous devez effectuer des questions sur le modèle dont vous avez besoin d'un manager pour cela. . Dans l'exemple ci-dessus, l'utilisateur effectue une requête sur Objets Manger of User Model.

3-QUERIES FAIT SUR LES MODÈLES.MANDERS DEMANAGER POUR CHAQUE modèle - CORRECT Interprétation


1 commentaires

Merci monsieur, est-ce parce que la requête sera déjà créée et avec le code le plus spécifique possible?



1
votes

Cliquez ici pour la documentation

Réf. P>

Par défaut, Django ajoute un gestionnaire avec les objets de noms à chaque Django classe modèle. Si vous avez une logique commerciale spécifique, vous pouvez utiliser des gestionnaires pour remplacer les méthodes de modèle intégrées telles que Save () et Supprimer () pour ajouter une logique commerciale au comportement de la base de données par défaut ou vous pouvez spécifiquement concevoir une certaine logique de requête. P> nom du fichier ----> modèles.py p> xxx pré>

créer un fichier gestionnaires de fichier.py dans votre application Nom de fichier ----> Managers.py P>

     import ModelName
     obj = ModelName.get_queryset(id)
     obj.title


2 commentaires

Je n'ai pas compris la logique sur le gestionnaire, je vais lire sur Doc et quelques tutoriels sur ModelManager. Mais devrais-je créer les gestionnaires sur des managers.py utiliser ensuite pour attribuer à une variable sur des modèles.py comme des objets et utilisez ensuite sur Vues attribuant comme: modelname.Objects ?


Ouais. Si vous avez une logique commerciale spécifique, vous pouvez créer des mangères ou créer des méthodes statiques à l'intérieur du modèle.py où vous pourrez identifier la méthode statique en appelant le modèle Name.Object.static_Method (ID) .. Méthode statique .. sera héritée par Onje.



1
votes
  1. Utilisez des querySets et des modèles personnalisés dans vos modèles
  2. Appelez les méthodes personnalisées de votre modèle de votre modèle de votre point de vue
  3. Passez les valeurs retournées (requêtes, instances ou autre) aux modèles (ou sérialisateur JSON, etc.)

    C'est une question de séparation des préoccupations:

    1. Le modèle (ou le sérialisateur JSON ou quoi que ce soit) n'a pas besoin de savoir où proviennent des données ni qu'ils ont été obtenus - seulement quelle est la structure de données
    2. Les vues n'ont pas à savoir comment la requête est mise en œuvre, uniquement sur la manière de recevoir des données pertinentes
    3. Seule la couche de modèle doit savoir sur sa mise en œuvre (encapsulation 101)

1 commentaires

Qu'en est-il des opérations comme un champ finis_day = modèles.dateTimefield () et je souhaite récupérer l'heure jusqu'à la finisth_day de (DateTime.now ()). time_left = f (modèle.finish_day - DateTime.now ()) devrait-il être fait sur des vues ou des modèles?



1
votes

Selon les idiomes Django, vous souhaitez ajouter des conseils pouvant être utiles:

  • Managers Model Managers C'est un endroit pour les requêtes les plus courantes, pas pour toutes les requêtes. Les gestionnaires décrivent des méthodes de base pour travailler avec des modèles. Si vous avez une logique largement utilisée pour votre modèle avec QuerySet - mettez-la à la méthode du gestionnaire. Par exemple, mes utilisateurs divisés par des domaines. Je souhaite donc obtenir l'utilisateur par nom et le domaine, ajoutez donc la méthode get_by_name_and_domain au gestionnaire de modèle utilisateur. En outre, vous pouvez accéder à votre modèle par l'attribut modèle dans le gestionnaire.
  • Les modèles font partie du modèle MTV (modèle de vue de modèle) sur Django et l'objectif principal du «modèle» lui-même est de décrire l'objet dB-objet mais non connecté logique commerciale. Alors, mettez vos requêtes personnalisées à des vues et rappelez-vous de principe sec.

1 commentaires

Je n'ai pas eu raison, alors je devrais créer les requêtes sur les managers de modèles dans les modèles et si je voulais faire une certaine opération avec cette requête, je devrais utiliser les points de vue? Ne pas faire les opérations sur les gestionnaires sur les modèles?