Как показать опции в select с помощью forms.ModelChoiceField - Django

У меня такая проблема: мне нужно показать в селекте данные модели, я работал с шаблоном формы, чтобы настроить его, но когда дело доходит до селекта, я не знаю, как показать варианты в шаблоне.

Мои формы:

class ProfileForm(forms.ModelForm):
    rol = forms.ModelChoiceField(queryset=Rol.objects.all().order_by('sort_order'), to_field_name='name')
    class Meta:
        model = User
        fields = ['email', 'first_name', 'last_name','rut', 'phone', 'gender', 'rol']
        exclude = ('username',)

    def __init__(self, user=None, *args, **kwargs):
        self.user = user
        super(ProfileForm, self).__init__(*args, **kwargs)

Мой HTML:

<tr>
                        <td class="table-text typo-grey"><label class="float-left">Rol</label></td>
                        <td class="rol centered">
                          <div class="ui input">
                            <select type="mail" id="id_{{form.rol.html_name}}"
                              name="{{form.rol.html_name}}" value="{{ form.rol.html_name|default:'' }}" maxlength="100">
                              <option></option>
                            </select>
                          </div>
                        </td>
                      </tr>

Если у вас есть совет или что-то еще, пожалуйста, напишите, спасибо.

Одна проблема заключается в том, что ваш цикл относится к циклу через rol в form.rol, но ваши опции относятся к form.rol, а не к rol.

Даже если вы сделаете это, я подозреваю, что у вас возникнет другая проблема. Вам нужно иметь список ролей для циклического просмотра - и form.rol, вероятно, не является таковым. Роли - это отдельная модель, поэтому нам придется собирать этот список отдельно. Попробуйте следующее:

В views.py для этого представления

rols = Rol.objects.all()  #You can filter your rols if you don't want all of them

context['rols_context'] = rols #pass them through to your template

затем, в вашем файле template.html

    {% for rol in rols_context %}
        <option value="{{ rol.id}}">{{rol.name}}</option>
    {% endfor %}
Вернуться на верх