在自定义html模板中使用Django表单

2024-06-11 18:36:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个html文件,我想用这个模板来呈现我的表单并保存到我的数据库中 如何做到这一点? HTML代码:

    <div class="container-contact100">
        <div class="wrap-contact100">
            <form class="contact100-form validate-form" enctype="multipart/form-data" method="POST">
                {% csrf_token %}
                <span class="contact100-form-title">
                    Add Item!
                </span>

                <div class="wrap-input100 validate-input" data-validate="Name is required">
                    <span class="label-input100">Title</span>
                    <input class="input100" type="text" name="name" placeholder="Enter food name">
                    <span class="focus-input100"></span>
                </div>

                <div class="wrap-input100 validate-input">
                    <span class="label-input100">Price</span>
                    <input class="input100" type="number" name="price" placeholder="Enter food price">
                    <span class="focus-input100"></span>
                </div>

                <div class="wrap-input100 validate-input" data-validate = "Message is required">
                    <span class="label-input100">Description</span>
                    <textarea class="input100" name="message" placeholder="Your description here..."></textarea>
                    <span class="focus-input100"></span>
                </div>

                <div class="wrap-input100 validate-input" data-validate="Image is required">
                    <input type="file" class="custom-file-input" id="customFile" name="filename">
                    <label class="custom-file-label" for="customFile">Choose file</label>
                    <span class="focus-input100"></span>
                </div>

                <div class="container-contact100-form-btn">
                    <div class="wrap-contact100-form-btn">
                        <div class="contact100-form-bgbtn"></div>
                        <button class="contact100-form-btn" type="submit">
                            <span>
                                Add
                                <i class="fa fa-long-arrow-right m-l-7" aria-hidden="true"></i>
                            </span>
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </div>



    <div id="dropDownSelect1"></div>

这是我的表单.py:

from django import forms
from .models import Product

class AddItemForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

甚至您也可以通过github从该链接访问我的项目:

https://github.com/imanashoorii/FoodMenu.git


Tags: namedivforminputdatatypevalidatelabel
2条回答

您必须根据Porudct模型的字段名在html中的form中设置name属性,如下所示(使用来自GitHub链接的数据):

添加产品.html

<form method="post" enctype="multipart/form-data"> # here define enctype attribute so your form can accept images
    {% csrf_token %}
    <input type="text" name="title">
    <input type="text" name="description">
    <input type="number" name="price">
    <input type="file" name="image">
    <button type="submit">Submit</button>
</form>

无需手动定义每个字段,只需将{{ form.as_p }}传递给html即可呈现<p>标记内的每个字段,如下所示:

<form method="post" enctype="multipart/form-data"> 
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

下面是如何将其保存在视图中的方法:

视图.py

def add_product(request):
    if request.method == 'POST':
        form = AddItemForm(request.POST, request.FILES) # request.FILES is so your form can save images
        if form.is_valid()
            form.save()
            return redirect('home') # redirect to a valid page
    else:
        form = AddItemForm()
    return render(request, 'add_product.html', {'form': form})

我已通过将views.py更改为此解决了我的问题,并进行了修复:

if form.is_valid():
    title = request.POST.get('title')
    description = request.POST.get('description')
    price = request.POST.get('price')
    image = request.POST.get('image')
    form.save()
    return redirect("food:home")

相关问题 更多 >