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.
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.
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