繁体   English   中英

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

[英]Using django form within custom html template

我有一个 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>

这是我的 forms.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

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

add_product.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")

暂无
暂无

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

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