需要帮助通过表单添加Django模型对象

时间:2015-07-31 17:49:09

标签: django django-views

在我的django项目中,我有一个' Field'用户可以通过表单添加的模型。

加载页面时调用的视图就是这样。

@login_requred
def index(request):
    if request.method == 'POST':
        # do 'Field' saving stuff
        HttpResponseRedirect('/index/')
    else:
        # some code ...
        return render(request, 'precisionagweb/index.html', {# stuff to render})

index.html中的表单是

<form id="addFieldForm" class="ui form" method="post">
    form stuff
</form>

这种方法很好用,但我想通过创建一个专门用于添加&#39; Field&#39;的视图来改变结构,所以当我添加修改时,我可以避免过于复杂的索引函数定义并删除功能。

我的方法是创建一个这样的视图:

@login_required
def user_addField(request):
    print 'made it here'
    addField_form = addField(data=request.POST)
    if addField_form.is_valid():
        field = addField_form.save(commit=False)
        field.user = request.user
        field.save()
    return HttpResponseRedirect('/index/')

从索引定义中删除POST内容,如下所示:

@login_requred
def index(request):
    # some code
    return render(request, 'precisionagweb/index.html', {# stuff to render})

并更改&#34;操作&#34;以这样的形式:

<form id="addFieldForm" class="ui form" method="post" action="addField/">
    form stuff
</form>

我的网址配置如下:

urlpatterns = [
    url(r'^signup/', views.signup),
    url(r'^index/', views.index),
    url(r'^addField/', views.user_addField),
    url(r'^login/', views.user_login),
    url(r'^logout/', views.user_logout),
]

这不起作用,因为我的新视图定义中的print语句永远不会打印到终端,因此视图永远不会被调用。我不知道该做什么,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

通常这样的视图看起来像这样:

def add_field(request):
    form = AddFieldForm(data=request.POST or None)

    if form.is_valid():
        field = form.save(commit=False)
        field.user = request.user
        field.save()

        return redirect('named_url')

    return render(request, 'template.html', { 'form': form })

这背后的概念很简单:该视图负责向用户显示实际表单以及实际存储新对象。

相关问题