[PYTHON] Comment générer une requête à l'aide de l'opérateur IN dans Django

Django:1.10

En conclusion, il a été énuméré ci-dessous.

QuerySet API reference | Django documentation | Django https://docs.djangoproject.com/ja/1.10/ref/models/querysets/#in

Pour les requêtes, vous devriez regarder cette page.

Par exemple, pour générer une requête afin d'obtenir une liste de livres publiés par l'auteur sélectionné, écrivez:

views.py


def search(request):

    form = SearchForm(request.POST)

    books = None

    if form.is_valid():
        books = Book.objects.filter(author_id__in = form.cleaned_data['author'])

    return render(request, 'books/search.html', {'form': form, 'books': books})

Auteur, livre, modèle de genre.

models.py


from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class Genre(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class Book(models.Model):
    name = models.CharField(max_length=512)
    author =  models.ForeignKey(Author, on_delete=models.CASCADE)
    genres = models.ManyToManyField(Genre)

    def __str__(self):
        return self.name

Un formulaire pour sélectionner un auteur.

forms.py


from django import forms

from books.models import Author

class SearchForm(forms.Form):

    authors = [(author.id, author.name) for author in Author.objects.all()]

    author = forms.MultipleChoiceField(label='Auteur', widget=forms.CheckboxSelectMultiple,
            choices=authors, required=False)

Si le modèle est le suivant,

searth.html


<form method="post" action="">
    {% csrf_token %}
    <h1>{{ form.author.label }}</h1>
    {{ form.author }}
    <input type="submit" value="Chercher" />
    <hr />
    <table border="1">
        <tr>
            <th>Titre</th>
            <th>Auteur</th>
            <th>Genre</th>
        </tr>
        {% for b in books %}
            <tr>
                <td>{{ b.name }}</td>
                <td>{{ b.author.name }}</td>
                <td>{% for g in b.genres.all %}{{ g.name }}{% endfor %}</td>
            </tr>
        {% endfor %}
    </table>
</form>

Il sera affiché comme ceci.

無題.png


Postscript 26/11/2016

J'implémentais l'ajout d'auteurs, mais un problème s'est posé. Je demande aux auteurs de la table de sélectionner les auteurs dans forms.py ci-dessus, mais cette méthode semble être la portée de l'application, et même si j'ajoute des auteurs, elle ne sera pas reflétée à l'écran à moins que le serveur ne soit redémarré. Je considérerai séparément ce qu'il faut faire lors de l'attribution de données de transaction à des choix.

Postscript 05/01/2017

Le problème ci-dessus a été résolu.

Choix non mis à jour dans le champ à choix multiples de Django http://qiita.com/nakkun/items/26598a7bf1f80b215ff2

Peut-être que ça devrait être bien. .. ..

Recommended Posts

Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment créer une API Rest dans Django
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
Comment écrire une interface graphique à l'aide de la commande maya
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment référencer des fichiers statiques dans un projet Django
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment écrire une validation personnalisée dans Django REST Framework
Comment utiliser ORM / Query Builder Orator de type Laravel avec Django
Comment utiliser la méthode __call__ dans la classe Python
J'ai fait une commande pour générer un commentaire pour une table dans Django
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Comment refléter CSS dans Django
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Dans Django, comment abréger la longue chaîne de caractères affichée au milieu ...
Récupérer la chaîne de requête (chaîne de requête) avec Django
Comment créer un enregistrement en collant une relation au modèle source d'héritage dans le modèle hérité par Django
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment déterminer l'existence d'un élément sélénium en Python
Comment obtenir toutes les valeurs possibles dans une expression régulière
Comment vérifier la taille de la mémoire d'une variable en Python
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Comment déployer une application Django sur heroku en seulement 5 minutes
Comment vérifier la version de Django
Comment dessiner un graphique avec Matplotlib
Comment supprimer des sessions expirées dans Django
Comment installer un package à l'aide d'un référentiel
Comment obtenir stacktrace en python
Comment faire des événements envoyés par le serveur dans Django
[Apprentissage de Django avec la lame du diable] Comment obtenir un ensemble de requêtes pour une référence avant / arrière
Comment faire un modèle pour la détection d'objets avec YOLO en 3 heures
Comment spécifier un fichier .ui dans la boîte de dialogue / interface graphique du widget dans PySide
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Ajout d'une fonction pour enregistrer les décalages souhaités dans la table des décalages Django
Pour trouver le nom de la vue avec l'espace de noms à partir de l'URL (path_info) dans Django
Comment réparer la population initiale avec un algorithme génétique utilisant DEAP
Comment créer une application à partir du cloud à l'aide du framework Web Django
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Comment calculer la volatilité d'une marque
Comment utiliser la bibliothèque C en Python
Comment coder un drone en utilisant la reconnaissance d'image
Comment effacer un taple dans une liste (Python)
Comment générer une séquence en Python et C ++
Comment implémenter la fonctionnalité de type helper Rails dans Django
Comment incorporer des variables dans des chaînes python
Comment créer un fichier JSON en Python
Comment refléter ImageField dans Django + Docker (oreiller)
Comment générer un objet Python à partir de JSON
Comment implémenter un sélecteur de dégradé dans Houdini
Comment imprimer des messages de débogage sur la console Django
Comment notifier les canaux Discord en Python
Comment obtenir les fichiers dans le dossier [Python]
[Python] Comment dessiner un histogramme avec Matplotlib
Générez des valeurs de hachage à l'aide de la méthode HMAC.
Comment écrire un document tuple nommé en 2020
Comment compter les nombres dans une plage spécifique
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)