Django: Как вручную отобразить каждое поле формы в шаблоне начальной загрузки?

#django #django-models #django-views #django-forms #django-templates

Вопрос:

Я нашел этот хороший шаблон начальной загрузки в Интернете и хочу использовать его в качестве шаблона для обновления профиля пользователя, я попробовал несколько методов, которые нашел здесь, а также на YouTube, но я все еще не мог заставить его работать. Мало того, что форма не отображается, обновленный профиль также не сохраняется, когда я нажимаю обновить. Может ли кто-нибудь помочь мне разобраться, в чем проблема? и я заранее приношу свои извинения, если я не понимаю, так как английский-мой второй язык.

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

 class TutorProfileUpdateView(UpdateView):
    model = User
    fields = ['first_name', 'last_name', 'email', 'phone number', 'current_address', 
    'image', 'bio']
    template_name = 'account/tutor_dashboard.html'
    success_url = reverse_lazy('tutor-dashboard')

    def form_valid(self, form):
        fm = form.save(commit=False)
        fm.user = self.request.user
        fm.save()
        messages.success(self.request, f'Profile Updated!')
        return HttpResponseRedirect(self.get_success_url())
 

и вот некоторая часть шаблона, я не буду вставлять все это сюда, так как это слишком долго.

 <form method="POST">
    {% csrf_token%}
    <div class="card h-100">
        <div class="card-body">
            <div class="row gutters">
                <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
                    <h6 class="mb-2 text-primary">Personal Details</h6>
                </div>
                <div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-12">
                    <div class="form-group">
                        {{ form.first_name }}
                        <label for="{{ form.first_name.id_for_label }}">First Name</label>
                        <input type="text" class="form-control" id="{{ form.first_name.id_for_label }}" placeholder="{{ user.first_name }}">
                    </div>
 

Ответ №1:

Вы можете перебирать поля формы и отображать каждую метку и ввод (или выбирать и т.д.) Вручную.

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

 

Для получения более подробной информации вы можете ознакомиться с документацией здесь: https://docs.djangoproject.com/en/3.2/topics/forms/#looping-over-the-form-s-fields