[PYTHON] Auswahlmöglichkeiten im Multiple-Choice-Feld von Django nicht aktualisiert

Django:1.10

Nachdem ich den folgenden Artikel geschrieben hatte, fand ich das Problem, das ich in "Addition 2016/11/26" geschrieben habe.

So generieren Sie eine Abfrage mit dem IN-Operator in Django http://qiita.com/nakkun/items/86a94e65fe6785325f54

Beim Erstellen eines Eingabefelds zur Auswahl eines Autors in MultipleChoiceField wurde eine Liste von Autoren angezeigt, die aus der Datenbank ausgewählt und an Auswahlmöglichkeiten übergeben werden können. Selbst wenn ich einen Autor hinzufüge, wird dies nicht auf dem Bildschirm angezeigt, es sei denn, der Server wird neu gestartet.

Sie können es in der Ansicht zuweisen, aber ich möchte, dass das Formular das Formular ausführt.

Ich hatte noch keine Python-Klassen studiert und fragte mich, ob sie anwendungsbezogen sein würden.

Wenn ich das Python-Buch am Ende des Jahres und am Anfang des Jahres lese, wird der Wert beim Erstellen des Klassenobjekts zugewiesen. Mit anderen Worten, es ist ein statisches Feld in Java.

Daher habe ich es geändert, um beim Erstellen einer Instanz die Auswahl zu ersetzen.

forms.py


class SearchForm(forms.Form):

    author = forms.MultipleChoiceField(label='Autor', widget=forms.CheckboxSelectMultiple, required=False)

    def __init__(self, param):
        forms.Form.__init__(self, param)
        self.fields['author'].choices = [(author.id, author.name) for author in Author.objects.all()]

Wenn Sie jetzt nur den Browser neu laden, wird der Autor hinzugefügt.

Nachtrag 2017/01/09

Ich habe Ihre Kommentare in den Kommentaren erhalten und festgestellt, dass dies einfacher ist.

forms.py


class SearchForm(forms.Form):

    author = forms.ModelMultipleChoiceField(
        label='Autor', widget=forms.CheckboxSelectMultiple, required=False,
        queryset=Author.objects.all(), to_field_name='name')

Sie können es mit genau dem tun!

Nachtrag 11.01.2017

Ich habe weitere Kommentare erhalten. Es kann jetzt aktualisiert werden, indem ein aufrufbares Objekt an Auswahl übergeben wird, ohne ModelMultipleChoiceField zu verwenden.

forms.py


class SearchForm(forms.Form):

    author = forms.MultipleChoiceField(
        label='Autor', widget=forms.CheckboxSelectMultiple,
        choices=lambda: [(author.id, author.name) for author in Author.objects.all()], required=False)

Das kannst du auch!

Recommended Posts

Auswahlmöglichkeiten im Multiple-Choice-Feld von Django nicht aktualisiert
Djangos auto_now wird möglicherweise nicht aktualisiert