python - 使用 Django ModelForms 保存数据

标签 python django

我之前使用过这段代码,它运行良好,另一位成员建议我使用 ModelForm,使用 form.is_valid() 函数等确实有意义。所以想试一试。

我浏览了互联网上的其他一些示例,但由于某种原因,我的示例似乎不起作用,或者可能是我做得不对,当我在 View 中打印表单时,我得到以下信息,然后转到else 语句,所以我的表单没有被保存

<input id="id_product" type="text" name="product" value="aassddf" maxlength="250" />
FAIL

我的模型.py

from django.db import models
from django.forms import ModelForm

class Category(models.Model):
    name = models.CharField(max_length=250)

    def __unicode__(self):
        return self.name

class Product(models.Model):
    category = models.ForeignKey(Category)
    product = models.CharField(max_length=250)
    quantity = models.IntegerField(default=0)
    price = models.FloatField(default=0.0)

    def __unicode__(self):
        return self.product

class ProductForm(ModelForm):
    class Meta:
        model = Product

我的观点.py

from models import *
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect

def index(request):
    ...
    ...

def add_product(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)
        print form['product']
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/product')
        else:
            print 'FAIL'
    return HttpResponseRedirect('/product')

我的html

<form method="post" action="add_product/">
        {% csrf_token %}
        <label for="category">Category</label>
        <select name="category" id="category">
        {% for category in category_list %}
          <option> {{ category.name }} </option>
        {% endfor %}
        </select>

        <label for="product">Product</label>
        <input type="text" name="product" id="product">

        <label for="quantity">Quantitiy</label>
        <input type="text" name="quantity" id="quantity">

        <label for="price">Price</label>
        <input type="text" name="price" id="price">

        <input type="submit" value="Add New product" id="create">
    </form>

有没有更好的方法可以使用 ModelForms 保存数据? 预先感谢您的帮助。

最佳答案

你应该阅读 the documentation .如果表单无效,则会出现一整套与之相关的错误,这些错误会告诉您确切原因。但是你只是把它扔掉,然后重定向到 /product。文档准确显示了如何重新显示出现错误的表单。

此外,您不应该直接在模板中编写 HTML 表单字段标签:使用 View 中的表单对象 - {{ form.product }} 等 - 因为这些将被重新填充适当的重新显示值。

关于python - 使用 Django ModelForms 保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12708112/

相关文章:

python - scipy.integrate.quad 在大范围内给出错误的结果

python - 为什么这么多的应用程序/框架将它们的配置文件保存为未执行的格式?

python - 批量训练但在 Tensorflow 中测试单个数据项?

Python __import__ 参数混淆

django - 我可以告诉一下django TestClient是否正在调用 View 吗

python - 我如何使 2.7 python 上下文管理器线程安全

python - 线程模块在 uwsgi 后面时非常慢

python - 我如何从Python安排世博会通知

django - 生产 django 服务器在渲染时抛出 "NoReverseMatch",正在进行开发

javascript - 如果 session 设置为 true,则打开一个 div