将 Django Bool FormField 与 ModelForm 和 CBV 中的提交按钮相关联
Associate a Django Bool FormField with a submit button in a ModelForm and CBV
该视图有一个布尔字段,它将定义一个问题是可以还是需要更正。
该模板将加载两个按钮作为表单的提交,“问题可以”和“问题需要更正”。
我需要将此按钮的值作为布尔字段值传递。
我在使用基于函数的视图时找到了答案,但我使用的是基于 Class 的视图,所以我不知道如何传递 request.POST 值。
这是我的 views.py 和 forms.py:
views.py
class QuestionValidation(PermissionRequiredMixin, UpdateView):
permission_required = 'users.validator'
model = Question
form_class = ValidationForm
template_name = 'question_validation.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['question'] = Question.objects.filter(
question_order=self.kwargs['order']).get(id_by_order=self.kwargs['id_by_order'])
context['order'] = self.kwargs['order']
context['id_by_order'] = self.kwargs['id_by_order']
return context
def get_object(self, *args, **kwargs):
question_order = Q(question_order__id=self.kwargs['order'])
question_id = Q(id_by_order__contains=self.kwargs['id_by_order'])
q = Question.objects.get(question_order & question_id)
return get_object_or_404(Question, pk=q.id)
def get_success_url(self, *args, **kwargs):
view_name = "order-detail"
return reverse(view_name, kwargs={'pk': self.kwargs['order']})
forms.py
class ValidationForm(forms.ModelForm):
class Meta:
model = Question
fields = ['revision_report', 'revision_approval']
widgets = {
'revision_report': forms.HiddenInput(),
'revision_approval': forms.HiddenInput(),
}
以及将加载此代码的部分模板:
<form action="" method="POST">{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-success" name="question_approved">Questão aprovada</button>
<button class="btn btn-danger" name="question_refused">Questão não foi aprovada</button>
</form>
<br><br>
<script src="{% static 'js/hoverValidatorTextbox.js' %}"></script>
{% endblock %}
正如 Ene P 在评论中所说,以下 link 解决了它。
该视图有一个布尔字段,它将定义一个问题是可以还是需要更正。 该模板将加载两个按钮作为表单的提交,“问题可以”和“问题需要更正”。 我需要将此按钮的值作为布尔字段值传递。 我在使用基于函数的视图时找到了答案,但我使用的是基于 Class 的视图,所以我不知道如何传递 request.POST 值。
这是我的 views.py 和 forms.py:
views.py
class QuestionValidation(PermissionRequiredMixin, UpdateView):
permission_required = 'users.validator'
model = Question
form_class = ValidationForm
template_name = 'question_validation.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['question'] = Question.objects.filter(
question_order=self.kwargs['order']).get(id_by_order=self.kwargs['id_by_order'])
context['order'] = self.kwargs['order']
context['id_by_order'] = self.kwargs['id_by_order']
return context
def get_object(self, *args, **kwargs):
question_order = Q(question_order__id=self.kwargs['order'])
question_id = Q(id_by_order__contains=self.kwargs['id_by_order'])
q = Question.objects.get(question_order & question_id)
return get_object_or_404(Question, pk=q.id)
def get_success_url(self, *args, **kwargs):
view_name = "order-detail"
return reverse(view_name, kwargs={'pk': self.kwargs['order']})
forms.py
class ValidationForm(forms.ModelForm):
class Meta:
model = Question
fields = ['revision_report', 'revision_approval']
widgets = {
'revision_report': forms.HiddenInput(),
'revision_approval': forms.HiddenInput(),
}
以及将加载此代码的部分模板:
<form action="" method="POST">{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-success" name="question_approved">Questão aprovada</button>
<button class="btn btn-danger" name="question_refused">Questão não foi aprovada</button>
</form>
<br><br>
<script src="{% static 'js/hoverValidatorTextbox.js' %}"></script>
{% endblock %}
正如 Ene P 在评论中所说,以下 link 解决了它。