我如何在 django 的同一视图功能中将最近保存的数据发送到模板中

Posted

技术标签:

【中文标题】我如何在 django 的同一视图功能中将最近保存的数据发送到模板中【英文标题】:How i can send recently save data into template in same view function in django 【发布时间】:2020-07-14 07:09:32 【问题描述】:

view.py 在下面的代码中,我将我最近的数据保存在模型中并创建了一个字典order = order.save(),因为我可以在我的模板中使用它。当我运行代码时,订单具有 ```None`` 值。

我能为它做些什么。

     def post(self, request, product_id):
          product = Product.objects.get(id=product_id)
          if request.POST['address'] and request.POST['quantity']:
               order = Order()
               order.or_proName = product.pro_name
               order.or_companyName = product.companyName
               order.or_quatity = request.POST['quantity']
               order.or_quatity = int( order.or_quatity)
               orderPrice = order.or_quatity*product.Sale_Price
               order.or_bill = 100 + orderPrice
               order.pub_date = timezone.datetime.now()
               product.Quantity -= order.or_quatity
               product.save()
               order = order.save()
               args = 'order':order
               return render(request, self.red_templateName, args)


【问题讨论】:

你不应该使用order = order.save(),而应该使用order.save() order.save() 是模型中的一个函数。它通常不返回任何内容,因此您的变量“order”将为空。您可以只调用 order.save() 而不将其分配给变量,就像您对产品所做的那样。之后,您可以像往常一样将订单传递给您的模板。 【参考方案1】:

django.db.models.Model.save() 通常不返回任何内容(与 django.forms.Form.save() 函数不同)

从您的代码中删除 order = order.save()

你可以在这里看到Model.save()是如何实现的https://github.com/django/django/blob/master/django/db/models/base.py#L666

【讨论】:

【参考方案2】:

您不应将.save() 函数的结果分配给order,因为这确实是None。只需.save() 订单,并在您的视图中进一步使用order 函数:

def post(self, request, product_id):
    product = Product.objects.get(id=product_id)
    if request.POST['address'] and request.POST['quantity']:
        order = Order()
        order.or_proName = product.pro_name
        order.or_companyName = product.companyName
        order.or_quatity = request.POST['quantity']
        order.or_quatity = int( order.or_quatity)
        orderPrice = order.or_quatity*product.Sale_Price
        order.or_bill = 100 + orderPrice
        order.pub_date = timezone.datetime.now()
        product.Quantity -= order.or_quatity
        product.save()
        order.save()
        args = 'order':order
        return render(request, self.red_templateName, args)

但是,您也应该定义一个 else 案例,因为 post 方法应该总是返回一个 HttpResponse 对象,例如错误消息。

【讨论】:

以上是关于我如何在 django 的同一视图功能中将最近保存的数据发送到模板中的主要内容,如果未能解决你的问题,请参考以下文章

在Django中将计算值从视图保存到模型

如何在 Django 中将多个上下文呈现为相同的 HTML

如何在 Django 1.8 中多次保存同一个表单?

如何在 django 的基于类的视图中将值传递给模板?

在 Django 视图中将用户/帐户表添加到 Postgres

在报告中创建新视图;使用不同的数据。为了在 Excel 中将 2 个报告导出到同一页面