我正在做一个大学项目。几天以来我一直在努力。但是我无法将订单的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 标记的圆圈是我想要的数据库值。 但是,我在这里提交订单。
当我进入管理界面时。
从输出中可以看出,total_price在起作用,它能够获得项目和数量的总数。
但是total_cost仍然为0。
有人可以帮我做错什么吗,因此, 我无法继续。