【问题标题】:Send some value to the form, by GET or POST request通过 GET 或 POST 请求向表单发送一些值
【发布时间】:2019-10-30 22:22:54
【问题描述】:

我需要使用 GET 或 POST 向表单发送一些值。

我的表格:

class InstallmentReportForm(forms.ModelForm):
    class Meta:
        model = InstallmentReport
        exclude = ()
    def __init__(self, *args, **kwargs):
        super(InstallmentReportForm, self).__init__(*args, **kwargs)
        self.fields['title'].queryset = Report.objects.filter(grant_name=??????)


InstallmentReportFormSet = inlineformset_factory(Installment,InstallmentReport,
                           form=InstallmentReportForm, fields=['title','spent'],
                                                         extra=1,can_delete=True)

这是我的视图模型:

class InstallmentReportCreate(LoginRequiredMixin,PermissionRequiredMixin,CreateView):
    model = Installment
    template_name = 'catalog/installment_report_update.html'
    permission_required = 'catalog.can_change_grant'
    form_class = InstallmentForm
    success_url = None

    def get_context_data(self, **kwargs):
        data = super(InstallmentReportCreate, self).get_context_data(**kwargs)
        if self.request.POST:
            data['titles'] = InstallmentReportFormSet(self.request.POST)
        else:
            data['titles'] = InstallmentReportFormSet()
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        print(titles)
        with transaction.atomic():
            form.instance.owner = self.request.user
            self.object = form.save()
            if titles.is_valid():
                titles.instance = self.object
                titles.save()
        return super(InstallmentReportCreate, self).form_valid(form)

    def get_success_url(self):
        return reverse('grant-installment-owner', args=(self.object.id,))

我需要获取 'grant_name' 来过滤数据。

我正在使用 Python3.7.3 和 Django 2.2.1

【问题讨论】:

  • 但是这个值是从哪里来的呢?
  • 来自 HTML 模板,通过 GET 或 POST

标签: python django python-3.x


【解决方案1】:

让传递的查询参数为'grant_name',在init()中为

def __init__(self, *args, **kwargs):

    if self.request.method == 'POST';

        grant_name = self.request.POST.get('grant_name')

    else:

        grant_name = self.request.GET.get('grant_name')

    super(InstallmentReportForm, self).__init__(*args, **kwargs)
    self.fields['title'].queryset = Report.objects.filter(grant_name=grant_name)

【讨论】:

  • 感谢您的建议,但我之前尝试过类似的方法,现在我再次尝试并收到错误:'InstallmentReportForm' object has no attribute 'request'
  • 谢谢。我是通过 html 模板完成的。更准确地说,我在没有过滤器的情况下做了不同的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多