[PYTHON] So generieren Sie eine Abfrage mit dem IN-Operator in Django

Django:1.10

Abschließend wurde es unten aufgeführt.

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

Bei Fragen sollten Sie sich diese Seite ansehen.

Um beispielsweise eine Abfrage zu generieren, um eine Liste der veröffentlichten Bücher des ausgewählten Autors zu erhalten, schreiben Sie:

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})

Autor, Buch, Genre-Modell.

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

Ein Formular zur Auswahl eines Autors.

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='Autor', widget=forms.CheckboxSelectMultiple,
            choices=authors, required=False)

Wenn die Vorlage wie folgt lautet:

searth.html


<form method="post" action="">
    {% csrf_token %}
    <h1>{{ form.author.label }}</h1>
    {{ form.author }}
    <input type="submit" value="Suche" />
    <hr />
    <table border="1">
        <tr>
            <th>Titel</th>
            <th>Autor</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>

Es wird so angezeigt.

無題.png


Nachtrag 26.11.2016

Ich habe die Hinzufügung von Autoren implementiert, aber ein Problem ist aufgetreten. Ich erhalte Autoren aus der Tabelle, um Autoren in forms.py oben auszuwählen, aber diese Methode scheint Anwendungsbereich zu sein, und selbst wenn ich Autoren hinzufüge, wird sie nicht auf dem Bildschirm angezeigt, es sei denn, der Server wird neu gestartet. Ich werde separat überlegen, was zu tun ist, wenn Transaktionsdaten Auswahlmöglichkeiten zugewiesen werden.

Nachtrag 2017/01/05

Das obige Problem wurde gelöst.

Auswahlmöglichkeiten im Multiple-Choice-Feld von Django nicht aktualisiert http://qiita.com/nakkun/items/26598a7bf1f80b215ff2

Vielleicht sollte das in Ordnung sein. .. ..

Recommended Posts

So generieren Sie eine Abfrage mit dem IN-Operator in Django
So erstellen Sie eine Rest-API in Django
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
So schreiben Sie eine GUI mit dem Befehl maya
So führen Sie einen Befehl mit einem Unterprozess in Python aus
So verweisen Sie auf statische Dateien in einem Django-Projekt
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
Verwendung von Laravel-ähnlichem ORM / Query Builder Orator mit Django
Verwendung der Methode __call__ in der Python-Klasse
Ich habe einen Befehl zum Generieren eines Kommentars für eine Tabelle in Django eingegeben
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
Wie man CSS in Django reflektiert
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Wie man in Django die angezeigte lange Zeichenkette in der Mitte abkürzt ....
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
So erstellen Sie einen Datensatz, indem Sie eine Beziehung zum geerbten Modell in das von Django geerbte Modell einfügen
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So bestimmen Sie die Existenz eines Selenelements in Python
So erhalten Sie alle möglichen Werte in einem regulären Ausdruck
So überprüfen Sie die Speichergröße einer Variablen in Python
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
So überprüfen Sie die Version von Django
So zeichnen Sie ein Diagramm mit Matplotlib
So löschen Sie abgelaufene Sitzungen in Django
So installieren Sie ein Paket mithilfe eines Repositorys
Wie bekomme ich Stacktrace in Python?
So führen Sie vom Server gesendete Ereignisse in Django durch
[Django lernt mit der Klinge des Teufels] So erhalten Sie einen Abfragesatz für die Vorwärts- / Rückwärtsreferenz
So erstellen Sie mit YOLO in 3 Stunden ein Modell für die Objekterkennung
So geben Sie eine .ui-Datei in der Dialog- / Widget-GUI in PySide an
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Es wurde eine Funktion hinzugefügt, um gewünschte Verschiebungen in der Django-Verschiebungstabelle zu registrieren
So finden Sie den Ansichtsnamen mit dem Namespace über die URL (path_info) in Django
Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
So erstellen Sie eine Anwendung aus der Cloud mithilfe des Django-Webframeworks
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
So berechnen Sie die Volatilität einer Marke
Verwendung der C-Bibliothek in Python
So codieren Sie eine Drohne mithilfe der Bilderkennung
So löschen Sie einen Taple in einer Liste (Python)
So generieren Sie eine Sequenz in Python und C ++
So implementieren Sie Rails-Helfer-ähnliche Funktionen in Django
Einbetten von Variablen in Python-Strings
So erstellen Sie eine JSON-Datei in Python
So reflektieren Sie ImageField in Django + Docker (Kissen)
So generieren Sie ein Python-Objekt aus JSON
So implementieren Sie eine Verlaufsauswahl in Houdini
So drucken Sie Debug-Meldungen auf der Django-Konsole
So benachrichtigen Sie Discord-Kanäle in Python
So erhalten Sie die Dateien im Ordner [Python]
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Generieren Sie Hash-Werte mit der HMAC-Methode.
Wie schreibe ich ein benanntes Tupeldokument im Jahr 2020?
So zählen Sie Zahlen in einem bestimmten Bereich
Hochladen auf ein freigegebenes Laufwerk mit pydrive
Kopieren und Einfügen des Inhalts eines Blattes im JSON-Format mit einer Google-Tabelle (mithilfe von Google Colab)