【问题标题】:data not storing in database django数据未存储在数据库django中
【发布时间】:2013-04-02 17:04:03
【问题描述】:

我的第一个问题是数据没有进入数据库。它没有显示任何错误,但也没有存储。 我的第二个问题是我正在使用下拉列表中的查询集预先填充表单字段,但它向我显示了 id(主键),我想显示其他字段。我该怎么做?

我的看法

def payment(request):
    #form = jobpostForm_first()
    #country_list = Country.objects.all()
    if request.POST:
        form = jobpostForm_detail(request.POST)

        if form.is_valid():
            if '_Submit' in request.POST:
              form.save()
              return HttpResponseRedirect('/thanks/')
    else:
        form = jobpostForm_detail()
        #form.fields['country'].queryset = Country.objects.all()

    c = {}
    c.update(csrf(request))

    return render_to_response('portal/display.html',{
        'form':form
    },context_instance=RequestContext(request))

我的模型:

class jobpostForm_detail(ModelForm):
    class Meta:

        model = payment_detail
        fields = ('payment_type','country')

    def __init__(self, *args, **kwargs):
        super(jobpostForm_detail, self).__init__(*args, **kwargs)

        self.fields['country'].queryset = Country.objects.all()
        self.fields['payment_type'].queryset = Payment_types.objects.all()

        self.helper = FormHelper()
        self.helper.form_class = 'horizontal-form'
        self.helper.form_id = 'id-jobpostform'
        self.helper.form_class = 'blueForms'
        self.helper.form_method = 'post'


        self.helper.add_input(Submit('submit_addcontent', 'Pay'))

        super(jobpostForm_detail, self).__init__(*args, **kwargs)

我的模板:

<form method="post" action="/portal/next/post/" class="blueForms" id="id-jobpostform">


    {% csrf_token %}

    {% crispy form %}

    </form>

【问题讨论】:

  • form.save() 之前尝试form.full_clean(),它应该抛出错误,如果有的话。另外,由于您正在发回请求上下文,因此您不需要执行c.update
  • ok.. 它会重定向到/thanks 吗?
  • 不,它没有重定向,谢谢它把我重定向到/portal/next/post/..即使我删除了 if form.is_valid(): if '_Submit' in request.POST: even那么它不会保存和重定向
  • 就在request.POST 之前打印request.method - 让我们看看请求方法是否实际上是POST
  • 不打印任何东西..这意味着它甚至不会在那个 chk 中运行

标签: django django-models django-templates django-views


【解决方案1】:

你为什么在你的视图中检查"_Submit"

我建议你阅读how to use a form in a view,尤其是cmets:

...
def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
...

在你的情况下,你只需要在form.is_valid()之后调用form.save()

问你一个问题:你能在你的表单类中解释一下这段代码吗?打错字了吧?

widgets = {

        }),

}

【讨论】:

  • o 是的,我之前使用过小部件..忘记删除..即使我删除了这个检查(如果 request.POST 中的 '_Submit' :) 仍然没有存储到数据库。
  • 然后用实际代码清理 OP 中的代码。哦,是的,如果您有任何错误,它们也会这样做:)
  • 清理了它..你能告诉我为什么它不进入数据库吗?
  • 1) 你仍然需要删除 if '_Submit',这是没用的 2) 你为什么在你的 init 中调用 super 两次?第二个电话需要删除 3)您的表格真的有效吗?检查打印/调试 4)我假设您运行了 syncdb 并且您的模型配置正确(提示:检查它)
  • 删除第一个super,而不是第二个
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2021-10-11
  • 2017-08-30
  • 2021-03-16
相关资源
最近更新 更多