繁体   English   中英

如何使用 Django 中的提交按钮向数据库添加内容?

[英]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=Truenull=True arguments。 我个人喜欢使用blank=True只是出于安全原因,我不会在这里讨论。 我还建议您修改模型和视图的命名系统。

总之:

  • 将字段 customer 添加到 ShoppingList model。
  • 将现场产品设为 CharField。
  • 制作一个带有隐藏字段的表单,当用户单击“添加到列表”时,该字段会回发 product.id。
  • 通过制作 ShoppingList object 来处理发布请求。
  • 考虑将数量设为 IntegerField。

暂无
暂无

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

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