#django-forms #formset
#джанго-формы #набор форм
Вопрос:
Я использую набор форм модели для обновления поля электронной почты для модели. Набор форм отображается должным образом, и новые данные формы email
сохраняются. Тем не менее, я хочу добавить некоторую функциональность в свое представление , где мне нужно использовать значение email
, но я не знаю, как это сделать в моем представлении.
Модель
class Student(models.Model): fullname = models.CharField(max_length=60) student_number = models.IntegerField() email = models.EmailField(max_length=50)
Вид
def editstudentemail(request, classroom_pk): classblock = get_object_or_404(Classroom, pk=classroom_pk) students = Student.objects.filter(classroom=classblock) EditEmailFormSet = modelformset_factory(Student, fields=('email',), extra=0) if request.method == 'POST': formset = EditEmailFormSet(request.POST, queryset=students) if formset.is_valid(): for form in formset: print(form) print(form.email) # gives an error # do some stuff with the email instances = formset.save() return redirect('gradebook:classroomdetail', classroom_id=classroom_pk) formset = EditEmailFormSet(queryset=students) context = {'classblock': classblock} context['students'] = students context['formset'] = formset return render(request, 'gradebook/editstudentemail.html', context)
шаблон
{% if students %} lt;form method="post"gt;{% csrf_token %} {{ formset.management_form }} {% for ss in students %} lt;div class="row"gt; lt;div class="col-4"gt; lt;bgt;{{ ss.fullname }}lt;/bgt; lt;/divgt; lt;div class="col-4"gt; {% for form in formset %} {% if forloop.parentloop.counter == forloop.counter %} {{ form|crispy }}lt;br/gt; {% endif %} {% endfor %} lt;/divgt; lt;hr/gt; lt;/divgt; {% endfor %} lt;input type="submit" value="Save" class="btn btn-outline-primary mt-2" /gt; lt;/formgt; {% endif %}
печать(форма) дает мне такие записи, как следующие:
lt;input type="email" name="form-0-email" value="34005@learn.vsb.bc.ca" maxlength="50" id="id_form-0-email"gt; lt;input type="hidden" name="form-0-id" value="df1b3f06-fbe8-4519-a5be-e11b76ebb1ac" id="id_form-0-id"gt;
Однако print(form.email)
возвращает эту ошибку: 'StudentForm' object has no attribute 'email'