我有一个包含隐藏的输入标签的表单,当我将表单发布到视图并打印时,我看到了我需要的值,但内容未保存到数据库 这是我的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
的数据库中答案 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;或类似的,以避免阴影/混乱。