0

我对 Python 很陌生,所以这可能是一个愚蠢的问题,但我还是会问。对于这种常见的视图情况,是否有 Django 表单“设计模式”?当我运行视图时,我希望它根据填写表单的用户类型对两种不同类型的表单之一进行操作。在 if request.method 块中有两个 if/then 块来确定我正在处理的表单类型似乎很难看。我想要的是能够引用“CreateProfileForm”,它将引用 CreateManProfileForm 或 CreateWomanProfileForm,具体取决于会话变量中的内容。

谢谢!

def create_profile(request, template):

    if request.session['user_type_cd'] == 'man':
        is_man = True
    else:
        is_man = False

    if request.method == "POST":
        if is_man:
            form = CreateManProfileForm(request.POST)
        else:
            form = CreateWomanProfileForm(request.POST)
        if form.is_valid():
            # Do stuff
            return HttpResponseRedirect(reverse('do-next-thing'))
    else:
        if is_man:
            form = CreateManProfileForm()
        else:
            form = CreateWomanProfileForm()

    return render_to_response(template, locals(), context_instance=RequestContext(request))
4

1 回答 1

1

你可以这样做:

创建表格字典,

FORMS = {
    0: CreateWomanProfileForm,
    1: CreateManProfileForm
}

在意见中:

def create_profile(request, template):
    is_man = 1 if request.session.get('user_type_cd') == 'man' else 0

    if request.method == "POST":
        form = FORMS.get(is_man)(request.POST)
        if form.is_valid():
            # Do stuff
            return HttpResponseRedirect(reverse('do-next-thing'))
    else:
        form = FORMS.get(is_man)()

    return render_to_response(template, locals(), context_instance=RequestContext(request))

甚至这应该工作

def create_profile(request, template):
    is_man = 1 if request.session['user_type_cd'] == 'man' else 0

    form = FORMS.get(is_man)(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            # Do stuff
            return HttpResponseRedirect(reverse('do-next-thing'))

    return render_to_response(template, locals(), context_instance=RequestContext(request))
于 2013-08-07T18:08:36.073 回答