简体   繁体   English

Django "如果 request.method == 'POST':" 返回 False

[英]Django "if request.method == 'POST':" returns False

I'm making Django app and I have an issue, I've never had problem with before.我正在制作 Django 应用程序,但我遇到了问题,我以前从未遇到过问题。 As always in form view, I'm checking if request.method == 'POST' but somehow it returns False,一如既往地在表单视图中,我正在检查 request.method == 'POST' 但不知何故它返回 False,

My code looks like that:我的代码如下所示:

def recipe_create_view(request):
    context = {}

    form = RecipeForm(request.POST or None)
    IngredientFormset = formset_factory(IngredientForm)
    formset = IngredientFormset(request.POST or None)

    context['form'] = form
    context['formset']  = formset

    if request.method == 'POST':
        if form.is_valid():
            if formset.is_valid():
                form.save()
                print("made a recipe")
                
                for form in formset:
                    child = form.save(commit=False)
                    child.recipe = parent
                    child.save()
                    print("made a Ingredient")
            else:
                print("formset is not valid")
        else:
            print("form is not valid")
    else:
        print("request method is not correct")

    return render(request, 'recipes/create_recipe.html', context)

create_recipe.html file: create_recipe.html 文件:

<form method="POST">
    {% csrf_token %}
    <label>recipe</label>
    <p>{{form}}</p>


    <label>ingredients</label>
    {% for form in formset %}
        
        <ul>
            <label>name</label>
            <li>{{ form.name }}</li>
            <label>quantity</label>
            <li>{{ form.quantity }}</li>
        </ul>
    {% endfor %}
    <div>
        <input type="submit" value="submit" class="button-33" role="button">
    </div>
</form>

Where is the problem?问题出在哪里?

It is necessary to return HttpResponseRedirect after dealing with POST data, the tip is not specific to Django, it's a good web practice in general.处理POST数据后需要返回HttpResponseRedirect,提示不是Django特有的,一般来说web是一个很好的做法。

Also, try to maintain both GET and POST request separately, so try below view:另外,请尝试分别维护 GET 和 POST 请求,因此请尝试以下视图:

def recipe_create_view(request):
    context = {}
    form="" # for the error of variable refrenced before assignment.
    IngredientFormset=""
    formset=""

    if request.method == 'POST':
        form = RecipeForm(request.POST)
        IngredientFormset = formset_factory(IngredientForm)
        formset = IngredientFormset(request.POST)

        if form.is_valid():
            if formset.is_valid():
                form.save()
                print("made a recipe")
                
                for form in formset:
                    child = form.save(commit=False)
                    child.recipe = parent
                    child.save()
                    print("made a Ingredient")
                return redirect('some_success_path_name')
   
            else:
                print("formset is not valid")
        else:
            print("form is not valid")
    else: # GET method
        print("request method is GET")
        form = RecipeForm()
        IngredientFormset = formset_factory(IngredientForm)
        formset = IngredientFormset()
        context['form'] = form
        context['formset']  = formset

        

    return render(request, 'recipes/create_recipe.html', context)

add action in your HTML form and POST in small case.在您的POST表单中添加action并以小写形式发布。

<form action="/your_backend_url_to_view/" method="post">
    {% csrf_token %}
    <label>recipe</label>
    <p>{{form}}</p>


    <label>ingredients</label>
    {% for form in formset %}
        
        <ul>
            <label>name</label>
            <li>{{ form.name }}</li>
            <label>quantity</label>
            <li>{{ form.quantity }}</li>
        </ul>
    {% endfor %}
    <div>
        <input type="submit" value="submit" class="button-33" role="button">
    </div>
</form>

You need to give HttpResponseRedirect() if you request.method=='POST' or you can give action in the form field like this Know More About HttpResponseRedirect Here如果您 request.method=='POST' ,则需要提供 HttpResponseRedirect() ,或者您可以在表单字段中执行操作,例如在此处了解有关 HttpResponseRedirect 的更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM