[英]How can i add something to the database with a submit button in Django?
我正在 django 中制作一个杂货清单 web 应用程序,我有一个包含您的杂货清单的页面,我有一个包含您可以添加到清单中的所有产品的页面。
每个产品都有一个“添加到列表”按钮。 目的是当您单击该按钮时,该产品会自动添加到杂货列表中。 有人知道该怎么做吗? 先感谢您。
模型.py
from django.db import models
# Create your models here.
class Brand(models.Model):
name = models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
class AllProducts(models.Model):
name = models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
class ShoppingList(models.Model):
product = models.ForeignKey(AllProducts, null=True, on_delete= models.SET_NULL, blank=True)
brand = models.ForeignKey(Brand, null=True, on_delete= models.SET_NULL, blank=True)
quantity = models.CharField(max_length=200, null=True, blank=True)
info = models.TextField(max_length=500, null=True, blank=True)
def __str__(self):
return self.product
class 品牌是 class 与所有品牌的产品。 class All_Products 是 class,其中包含您可以添加到杂货列表中的所有产品。 class ShoppingList 是一个 class,其中包含杂货清单中的所有产品。
视图.py
def home(request):
products = ShoppingList.objects.all()
context = {
'products':products,
}
return render(request, 'groceries_list/home.html', context )
def all_products(request):
all_products = AllProducts.objects.all()
context = {
'products':all_products,
}
return render(request, 'groceries_list/all_products.html', context)
The home function is the function that handels the groceries list page an the all_products function is the function that handels the page with all the product you can add to your list.
杂货清单模板
{% extends "groceries_list/base.html" %}
{% block content %}
<div class="card">
<div class="card-body">
<div class="card m-1 text-white">
<a href="{% url 'create_grocery' %}" class="btn btn-success btn-md btn-block ">Add Grocery</a>
</div>
{% for product in products %}
<div class="item-row">
<div class="card m-1 text-white" style="background-color: #9BD6E0;">
<div class="card-body">
<a class="btn btn-sm btn-info" href="{% url 'update_gorcery' product.id %}">Update</a>
<a class="btn btn-sm btn-danger" href="{% url 'delete_gorcery' product.id %}">Delete</a>
<span class="text-dark"><strong>{{product.product}}</strong> {{product.quantity}} </span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
所有产品模板
% extends "groceries_list/base.html" %}
{% block content %}
<div class="card">
<div class="card-body">
<div class="card m-1 text-white">
<a href="{% url 'create_product' %}" class="btn btn-success btn-md btn-block ">Add Product</a>
</div>
{% for product in products %}
<div class="item-row">
<div class="card m-1 text-white" style="background-color: #9BD6E0;">
<div class="card-body">
<button type="submit" class="btn btn-success btn-sm ">Add To List</button>
<span class="text-dark ml-3 text-center"><strong>{{product.name}}</strong>
<a class="btn btn-sm btn-danger float-right" href="{% url 'delete_product' product.id %}">Delete</a>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
该站点可能有许多users
同时使用它,因此您应该安排一种方法来识别将商品添加到购物清单的特定user
。 最简单的方法是从django.auth.models
创建一个身份验证系统(您可以按原样使用或扩展User
模型)查看您的视图,它们是home()
和all_products()
视图正在呈现相同的上下文,这绝对不是购物车中的内容(对于主视图)。
处理此问题的一种方法是使您的ShoppingList
model 包含一个customer
字段。 客户将是提出request
的用户。 在all_products.html
页面中,您可以创建一个带有隐藏字段的表单,您可以使用product.id
和“添加到列表”按钮作为此表单的提交按钮预先填充该隐藏字段。 当用户单击“添加到列表”时,表单将发布到调用负责视图的 url。 在该视图中,您使用product.id
ShoppingList object
和客户作为ShoppingList
(发出request.user
的用户)。 只是一些随机提示:在您的ShoppingList model
中,您将数量定义为CharField
但数量最好定义为IntegerField
。 此外,不需要同时使用blank=True
和null=True
arguments。 我个人喜欢使用blank=True
只是出于安全原因,我不会在这里讨论。 我还建议您修改模型和视图的命名系统。
总之:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.