web-dev-qa-db-de.com

django-Formular Dropdown-Liste mit Zahlen

ich bin neu bei Django und möchte ein einfaches Formular erstellen. Laut Doc kann ich ein Formular mit dem Formularmodul von Django erstellen

from Django import forms

class CronForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField(required=False, label='Your e-mail address')
    message = forms.CharField(widget=forms.Textarea)

    def clean_message(self):
        message = self.cleaned_data['message']
        num_words = len(message.split())
        if num_words < 4:
            raise forms.ValidationError("Not enough words!")
        return message

was ich wissen möchte ist, wie man eine Dropdown-Liste von Tagen im Monat erstellt, d. h. von 1 bis 31?

einige haben es mit Javascript in ihrer Formularvorlage getan. Kann dies in Django gemacht werden?

23
krisdigitx

Sie suchen eine ChoiceField, die standardmäßig als select html-Element dargestellt wird . https://docs.djangoproject.com/de/dev/ref/forms/fields/#choicefield

class CronForm(forms.Form):
    days = forms.ChoiceField(choices=[(x, x) for x in range(1, 32)])
51

sie können mit dem manuellen Rendern der Felder beginnen. Ein einfaches Beispiel:

{% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
            {% if field.help_text %}
                <p class="help">{{ field.help_text|safe }}</p>
            {% endif %}
        </div>
    {% endfor %}

Dadurch wird das Formular ohne Formatierung gerendert. Anschließend müssen Sie die relevante Klasse anwenden, um eine Dropdown-Liste (aus w3c Dropdown-CSS kopiert) zu erstellen: -

 <div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Tutorials
    <span class="caret"></span></button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">HTML</a></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">CSS</a></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">JavaScript</a></li>
      <li role="presentation" class="divider"></li>
      <li role="presentation"><a role="menuitem" tabindex="-1" href="#">About Us</a></li>
    </ul>
  </div>
</div>

die beiden kombinieren: -

<div class="dropdown">
        <button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Days
            <span class="caret"></span></button>
        <div class="fieldWrapper">
            <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
                {% for field in form %}
                    <li class="fieldWrapper">
                        {{ field.errors }}
                        {{ field.label_tag }} {{ field }}
                        {% if field.help_text %}
                            <p class="help">{{ field.help_text|safe }}</p>
                        {% endif %}
                    </li>
                {% endfor %}
            </ul>
        </div>
    </div>
0
Arthur Kamau