如何从表格中获取数据?

时间:2019-04-02 09:51:44

标签: python django python-3.x django-models django-forms

如何从表单(ProductCreateForm)中获取数据?

如果我写form = self.get_form(),那么我只会得到一个表单模板,其中选择了一些数据,而没有选择(特别是选择)。

如果我写form = ProductCreateForm(request.POST),则会收到一条错误消息,指出未找到该请求。也许是由于这样的事实:我在get_context_data()中设置了请求,并在__init__的{​​{1}}方法中使用了它们。

我以forms.py中的clean方法处理数据。

我有以下视图

forms.py

表格

class ProductsCreate(CreateView):
    model = Product
    form_class = ProductCreateForm
    http_method_names = ['get', 'post']

    def get_initial(self):
        initial = super(ProductsCreate, self).get_initial()
        initial['request'] = self.request

        return initial
​
    def get_context_data(self, *args, **kwargs):
        ctx=super(ProductsCreate, self).get_context_data(*args, **kwargs)
        ctx['special_form'] = SpeciallyPriceForm()

        return ctx
​
    def get(self, request, *args, **kwargs):
        self.object = None

        if kwargs.get('slug'):
            category = Category.objects.filter(slug=kwargs.get('slug')).first()
            self.initial.update({'category': category})

        return self.render_to_response(self.get_context_data())

    def post(self, request, *args, **kwargs):
        self.object = None
        form = ProductCreateForm(request.POST)     #What here?
        special_form = SpeciallyPriceForm(self.request.POST)
​
        if form.is_valid() and special_form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

1 个答案:

答案 0 :(得分:0)

1。以这种方式尝试通过请求

def get_initial(self):
    """
    Returns the initial data to use for forms on this view.
    """
     initial = super(ProductsCreate, self).get_initial()

    initial['request'] = self.request

   return initial

然后输入forms.py

    def __init__(self):
         kwargs.pop('initial').get('request')
  1. 您确定这一切正常吗?在您的表单中的 init 上,我没有看到super()调用,因此您应该收到错误消息?

  2. 您仅对类别字段有问题吗?您可以正确获取其余数据吗?

  3. 您将kwargs.pop('request')传递到哪里?

  4. 您可以打印并检查self.request.POST中的内容