将html输入标记保存到django模型

时间:2016-03-30 11:49:09

标签: python html django

我有一个包含隐藏的输入标签的表单,当我将表单发布到视图并打印时,我看到了我需要的值,但内容未保存到数据库 这是我的HTML

<form method="POST" action="/selly/cart/" item_id="{{product.pk}}" enctype="multipart/form-data">
    {% csrf_token %}
    <h1 name="description">Description is : {{each_item.description}}</h1>
    <p><input type="hidden" name="description" value="{{each_item.description}}"></p>

    <span name="price">Price is : $ {{each_item.price}}/piece</span>
    <p><input type="hidden" name="price" value ="{{each_item.price}}"></p>

    <p>Quantity is : <input type="number" default="0" name="quantity"> piece ( {{each_item.item_remaining}} pieces available )</p>
    <br>
    <input type="submit" class="btn btn-primary" value="Add to Cart">

</form>

这是我的views.py

from selly.models import Cart
def cart(request):
    if request.method == "POST":
        print "rp ", request.POST

        description = request.POST['description']
        print "Description is ", description

        price = request.POST['price']
        print "Price is ", price

        quantity = request.POST['quantity']
        print "Quantity is ", quantity

        items =  Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")
        print "ITEMS", items
    return render(request, 'selly/cart.html', {'items': items})

这是model.py

class Cart(models.Model):
    description = models.CharField(max_length = 100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    quantity = models.IntegerField()

    def __str__(self):
        return self.description

    def total(self):
        return self.price * self.quantity

有没有办法让它保存到我创建的名为Cart

的数据库中

1 个答案:

答案 0 :(得分:1)

我很惊讶您没有收到该代码的错误 - get_or_create会根据文档返回一个元组:

  

返回(object,created)的元组,其中object是检索到的或   创建的对象和创建的是一个布尔值,指定是否为新的   对象已创建。

所以你的行items = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")

需要

items, created = = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")

你也可以查询那个创建的变量,因为如果它是假的,那么它还没有创建一个新的对象;如果它没有创建新对象,那么所有get_or_create正在做的是返回数据库中已有的对象。

如果您正在更新对象,则需要手动保存对象。

这是因为:

  

这意味着作为boilerplatish代码的快捷方式。例如:

try:
    obj = Person.objects.get(first_name='John', last_name='Lennon') 
except Person.DoesNotExist:
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
    obj.save()

详细信息位于文档页面for get_or_create.

此外,您的最后一行是错误的 - 您正在为对象分配字符串,您执行price="price" - 您实际上想要price=price,因为您正在分配o bject.price=price,这就是您在上面的代码中称为变量的内容。我建议可能会调用这些变量&#39; incoming_price&#39;或类似的,以避免阴影/混乱。