[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options

Aperçu

Je touche le champ de choix avec Django, et je garderai un mémorandum des parties qui ont pris du temps. Cliquez ici pour un exemple de code (https://github.com/yui728/choicefield_sample)

table des matières

À propos de Choice Field

échantillon

from django import forms


class SampleChoiceForm(forms.Form):
    choice1 = forms.fields.ChoiceField(
        choices = (
 ('ja', 'Japon'),
 («nous», «Amérique»),
 («uk», «UK»),
 ('ch', 'Chine'),
 ('kr', 'Corée')
        ),
        required=True,
        widget=forms.widgets.Select
    )
from django.shortcuts import render
from django.views import View
from . import forms

class SampleChoiceView(View):
    def get(self, request):
        form = forms.SampleChoiceForm()
        context = {
            'form': form
        }

        return render(request, 'choice_sample.html', context)

sample_choice_view = SampleChoiceView.as_view()
<!DOCTYPE html>
<html lang="ja">
    <head>
 <title> Échantillon ChoiceField </ title>
    </head>
    <body>
        <form method="POST" aciton="">
            {% for field in form %}
            {{ field }}
            {% endfor %}
            {% csrf_token %}
        </form>
    </body>
</html>
<!doctype html>
<html lang="ja">
<head>
<title> Échantillon ChoiceField </ title>
</head>
<body>
 <form method="POST" action="">
   <select id="id_choice1" name="choice1">
<option value = "ja"> Japon </ option>
<option value = "us"> Amérique </ option>
<option value = "uk"> Royaume-Uni </ option>
<option value = "ch"> Chine </ option>
<option value = "kr"> Corée </ option>
   </select>
   <input type="hidden" name="csrfmiddlewaretoken" value="xxxxxxxx" />
 </form>
</body>
</html>

afficher

表示結果1.png

Là où ça a pris du temps

Comment ajouter des choix plus tard

Dans les tutoriels officiels et les tutoriels Django Girls, les champs avec des choix sont écrits sous la forme d'obtenir des choix du modèle ou de donner des choix fixes comme valeurs initiales avec le paramètre choice de ChoiceField. Mais que faire si vous souhaitez créer cette option de manière dynamique?

Propriété choix du champ

Il y a une page appelée Model Field Reference dans la documentation Django. Il décrit les champs utilisés dans le formulaire, y compris les champs de modèle. Si vous le cherchez, vous trouverez la section Field.choices. Au cas où, jetez un œil à ChoiceField Source Code.

class ChoiceField(Field):
 (Omis)
    def _get_choices(self):
        return self._choices

    def _set_choices(self, value):
    # Setting choices also sets the choices on the widget.
    # choices can be any iterable, but we call list() on it because
    # it will be consumed more than once.
        if callable(value):
             value = CallableChoiceIterator(value)
        else:
              value = list(value)

        self._choices = self.widget.choices = value

   choices = property(_get_choices, _set_choices)
 (Omis)

Il existe certainement une propriété appelée «choix». Utilisons-le.

Code ChoiceField pour ajouter des choix plus tard

from django import forms
 (Omis)
class SampleChoiceAddForm(forms.Form):
    choice1 = forms.fields.ChoiceField(
        required=True,
        widget=forms.widgets.Select
    )
from django.shortcuts import render
from django.views import View
from . import forms
 (Omis)
class SampleChoiceAddView(View):
    def get(self, request):
        form = forms.SampleChoiceAddForm()
        form.fields['choice1'].choices = [
 ('11ème'),
 ('2', '2e'),
 ('3', '3e'),
 ('4', '4e'),
 ('5', '5e'),
        ]
        context = {
            'form': form
        }

        return render(request, 'choice_sample.html', context)
 (Omis)
sample_choice_add_view = SampleChoiceAddView.as_view()
<!DOCTYPE html>
<html lang="ja">
<head>
<title> Échantillon ChoiceField </ title>
</head>
<body>
 <form method="POST" aciton="">
   <select name="choice1" id="id_choice1">
<option value = "1"> 1er </ option>
<option value = "2"> seconde </ option>
<option value = "3"> 3e </ option>
<option value = "4"> 4ème </ option>
<option value = "5"> 5ème </ option>
   </select>
   <input type="hidden" name="csrfmiddlewaretoken" value="xxxxxxxx">
 </form>
</body>
</html>

afficher

表示結果2.png

J'ai pu ajouter et poursuivre les choix!

Recommended Posts

[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment installer et utiliser pandas_datareader [Python]
python: Comment utiliser les locals () et globals ()
Comment utiliser le zip Python et énumérer
Comment utiliser is et == en Python
[Python] Comment utiliser la fonction de hachage et taple.
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Comment utiliser Django avec Google App Engine / Python
Comment utiliser Decorator dans Django et comment le créer
Python: comment utiliser async avec
Comment installer et utiliser Tesseract-OCR
[Python] Comment utiliser la série Pandas
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
[Python] Résumé de l'utilisation des pandas
Comment empaqueter et distribuer des scripts Python
[Introduction à Python] Comment utiliser la classe en Python?
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
[python] Comment utiliser __command__, explication des fonctions
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
[Python] Comment utiliser import sys sys.argv
Comment utiliser les variables d'environnement Serverless Framework et Python et gérer les étapes
[Python] Organisation de l'utilisation des instructions
Mémorandum sur l'utilisation du python gremlin
[Python2.7] Résumé de l'utilisation d'unittest
Comment utiliser __slots__ dans la classe Python
Comment utiliser "deque" pour les données Python
[Python] Comment calculer MAE et RMSE
[Python] Comprendre comment utiliser les fonctions récursives
Comment ajouter un module python à l'environnement anaconda
Résumé de l'utilisation de la liste Python
Comment utiliser les expressions régulières en Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment ajouter des options au serveur de runtime manage.py de Django
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)