Как исправить ошибку (Скрытое поле submitted_by) This field is required в django
Я пытаюсь скрыть поле submitted by в моем forms.py, потому что я не хочу, чтобы пользователь загружал задание от имени другого пользователя. Поэтому я скрываю поле, но перед тем, как скрыть его, я устанавливаю значение зарегистрированного пользователя в этот текст ввода с помощью javascript, но получаю следующую ошибку. (Скрытое поле submitted_by) Это поле является обязательным. forms.py
class assignmentUploadForm(ModelForm):
class Meta:
model = Submissions
fields = ('submitted_by', 'submitted_to',
'submission_title', 'submission_file', 'submission_status')
widgets = {
'submitted_by': forms.TextInput(attrs={'class': 'form-control', 'type': 'hidden', 'id': 'user', 'value': ''}),
'submitted_to': forms.Select(attrs={'class': 'form-control'}),
'submission_title': forms.Select(attrs={'class': 'form-control'}),
}
template
<form method="post" enctype="multipart/form-data" style="margin-left: 240px;">
{% csrf_token %}
{{form.as_p}}
<input type="submit">
var name = "{{user.username}}"
document.getElementById('user').value = name;
views.py
class AddAssignmentView(CreateView):
model = Submissions
form_class = assignmentUploadForm
template_name = 'project/assignment.html'
Лучше бы его вообще не было в форме.
Все, что нужно сделать, это проинспектировать элемент и изменить тип на hidden.
Вы можете установить значение submitted_by для текущего пользователя в form_valid()
class assignmentUploadForm(ModelForm):
class Meta:
model = Submissions
fields = ('submitted_to', 'submission_title',
'submission_file', 'submission_status')
widgets = {
'submitted_to': forms.Select(attrs={'class': 'form-control'}),
'submission_title': forms.Select(attrs={'class': 'form-control'}),
}
class AddAssignmentView(CreateView):
model = Submissions
form_class = assignmentUploadForm
template_name = 'project/assignment.html'
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.submitted_by = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())