web-dev-qa-db-fra.com

Liste déroulante dans Django Model

Je veux créer un champ dans Django models.py qui s'affichera sous forme de liste déroulante et l'utilisateur pourra sélectionner les options à partir de là.

Si j'ai 5 choix:

  • VERT
  • BLEU
  • ROUGE
  • ORANGE
  • NOIR

Comment dois-je écrire mon code dans models.py et Forms.py pour que le modèle le rende comme un élément déroulant?

27
S7H

Spécifiez CharField ou IntegerField avec l'option choices dans votre modèle https://docs.djangoproject.com/en/1.8/ref/models/fields/#choices et utilisez ModelForm https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/ .

15
f43d65

Du modèle au modèle:

models.py

COLOR_CHOICES = (
    ('green','GREEN'),
    ('blue', 'BLUE'),
    ('red','RED'),
    ('orange','ORANGE'),
    ('black','BLACK'),
)

class MyModel(models.Model):
  color = models.CharField(max_length=6, choices=COLOR_CHOICES, default='green')

forms.py

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ['color']

views.py

class CreateMyModelView(CreateView):
    model = MyModel
    form_class = MyModelForm
    template_name = 'myapp/template.html'
    success_url = 'myapp/success.html'

template.html

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>

ou pour afficher uniquement votre champ de sélection:

{{ form.color }}
46
Val F.