无法将订单的总成本存储到数据库

时间:2019-06-06 19:29:23

标签: python-3.x django-models django-templates django-views

我正在做一个大学项目。几天以来我一直在努力。但是我无法将订单的total_cost值存储到数据库中。其他一切正常。但是在数据库中,它显示了0作为total_cost的值。

我有一个包含其各自成本的产品列表。我将它们添加到我的购物车中。即使在我使用{{item.total_price}}的购物车(模板)中,也会添加购物车中所有商品的值,并在模板(create.html)中显示该值。

total_price为OrderItem类,total_cost为Order类。 根据我在代码中提到的内容,total_price和total_cost之间可能会有混淆。 total_price是商品的价格*数量。 (查看我在下面添加的输出)

总成本(我想在数据库中输入)是总和(项目*数量)。

数据能够显示在我的模板中,但不会存储到我的数据库中。

这是我的代码:-

这是我的create.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% load static %}
{% block title %}
    Your Shopping Cart| Checkout
{% endblock %}

{% block content %}
{% include 'navbar1.html' %}
<body>
    <div style="padding-bottom:150px;" class="container">
        <div class="row" style="margin-top: 6%">
            <div class="col-md-8">
                <h4 class="page-header">Billing Details</h4>
                <form action="." method="post">
                    {% csrf_token %}
                    {{ form | crispy }}<br>
                    <input type="submit" class="btn btn-primary" value="Submit order">
                </form>
            </div>
            <div class="col-md-4">
                <div class="page-header">
                    <h3> Your Order </h3>
                    <li class="list-group-item ">Total Cost: <i class="fa fa-rupee" style="font-size:17px;color:green">{{ cart.get_total_price }}</i></li>
                </div>
                <ul class="list-group">
                    {% for item in cart %}
                        <li class="list-group-item">
                        {{ item.quantity | safe}} x {{ item.product.name | upper }} :
                        <span class="fa fa-rupee" style="font-size:17px;color:green">{{ item.total_price |ljust:"10" }}</span>
                        </li>
                    {% endfor %}


                </ul>

            </div>
        </div>
    </div>
{% include 'footer.html' %}
</body>
{% endblock %}

这是我的订单应用程序/models.py

from django.db import models
from shop.models import Product


class Order(models.Model):
    first_name = models.CharField(max_length=60)
    last_name = models.CharField(max_length=60)
    email = models.EmailField()
    address = models.CharField(max_length=150)
    postal_code = models.CharField(max_length=30)
    city = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    paid = models.BooleanField(default=False)
    total_cost = models.DecimalField(max_digits=100, decimal_places=3, default=0)


    class Meta:
        ordering = ('-created', )

    def __str__(self):
        return 'Order {}'.format(self.id)

    #def total_cost(self):
        #return sum([item.total_cost for item in self.items.all()])

    def get_total_cost(self):
        return sum(item.get_cost() for item in self.items.all())


class OrderItem(models.Model):
    order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
    product = models.ForeignKey(Product, related_name='order_items', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    quantity = models.PositiveIntegerField(default=1)
    total_price = models.DecimalField(max_digits=100, decimal_places=3, default=0)

    def __str__(self):
        return '{}'.format(self.id)

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

这是我的订单应用程序/ admin.py

from django.contrib import admin
from .models import Order, OrderItem


class OrderItemInline(admin.TabularInline):
    model = OrderItem
    raw_id_fields = ['product']


class OrderAdmin(admin.ModelAdmin):
    list_display = ['id', 'first_name', 'last_name', 'email', 'address', 'postal_code', 'city', 'total_cost', 'paid', 'created',
                    'updated']
    list_filter = ['paid', 'created', 'updated']
    inlines = [OrderItemInline]


admin.site.register(Order, OrderAdmin)

这是我的订单应用程序/views.py

from django.shortcuts import render
from .models import OrderItem , Order
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from payTm import Checksum
from django.views.decorators.csrf import csrf_exempt
from .forms import OrderCreateForm
from cart.cart import Cart
MERCHANT_KEY = 'my_merchant_key_';



@login_required
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(
                    order=order,
                    product=item['product'],
                    price=item['price'],
                    quantity=item['quantity'],
                    total_price=item['total_price'],
                )
            cart.clear()
            param_dict = {
                'MID': 'my_merchant_id',
                'ORDER_ID': str(order.id),
                'TXN_AMOUNT': str(order.total_cost),
                'CUST_ID': order.email,
                'INDUSTRY_TYPE_ID': 'Retail',
                'WEBSITE': 'WEBSTAGING',
                'CHANNEL_ID': 'WEB',
                'CALLBACK_URL': 'http://127.0.0.1:8000/handlerequest/',
            }
            param_dict['CHECKSUMHASH'] = Checksum.generate_checksum(param_dict, MERCHANT_KEY)
        return render(request, 'paytm.html', {'order': order, 'param_dict': param_dict})

    else:
        form = OrderCreateForm()
        return render(request, 'create.html', {'form': form})

@csrf_exempt
def handlerequest(request):

    return HttpResponse("Here's the text of the Web page.")

有人可以帮助我解决我做错的事吗?

这是输出。

create.html 标记的圆圈是我想要的数据库值。 但是,我在这里提交订单。

当我进入管理界面时。

Admin Interface

从输出中可以看出,total_price在起作用,它能够获得项目和数量的总数。

但是total_cost仍然为0。

有人可以帮我做错什么吗,因此,  我无法继续。

0 个答案:

没有答案