Я нашел решение,
Проблема в том, что когда вы используете generic.CreateView
и задаете либо поля, либо form_class, тогда этот класс будет читать только эти поля.Даже если вы добавите вручную дополнительное поле ввода, оно не будет передано внутри класса.
Чтобы решить эту проблему, я создал класс формы со скрытым полем.
class MyForm(forms.ModelForm):
class Meta:
model = models.OrderDetail
fields = ('first', 'second', 'third')
widgets = {
'third' : forms.HiddenInput(),
}
Затем я использую эту форму как обычный вид внутреннего класса
class HomePage(LoginRequiredMixin, generic.CreateView):
template_name = 'index.html'
model = MyModel
form_class = forms.MyForm
success_url = reverse_lazy('home')
Затем добавляем дополнительное скрытое поле внутри HTML-файла
<form action="." method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="hidden" name="third" value="someValue" />
<button type="submit" name="_submit" class="btn btn-raised btn-primary">Submit</button>
</form>
Таким образом, вы заменяетеваше скрытое поле, которое идет с form.as_p
с пользовательским.
Примечание: Вы не на самом делезаменить поле.Если вы проверите код, то увидите, что у вас будет 2 скрытых поля, но только одно со значением.Но поскольку оба они скрыты, никто не может добавить ценность другому, поэтому поведение такое же, как и в случае замены поля.