Я делаю проект колледжа. Я пробую несколько дней. Но я не могу сохранить свое значение total_cost заказа в базе данных. Все остальное работает отлично. Но в базе данных он показывает мне 0 в качестве значения для total_cost.
У меня есть список товаров с указанием соответствующих расходов. Я добавляю их в корзину. Даже в моей корзине (шаблон), когда я использую {{item.total_price}}. Добавляется значение всех товаров в моей корзине, и это значение отображается в моем шаблоне (create.html).
total_price относится к классу OrderItem, а total_cost - к классу Order.
Может быть путаница между total_price и total_cost в соответствии с тем, что я упоминаю в своем коде.
Total_price - цена товара * количество. (Просмотрите вывод, который я добавил ниже)
total_cost (который я хочу указать в своей базе данных) - это сумма (элемент * количество).
Данные могут отображаться в моем шаблоне, но не сохраняются в моей базе данных.
Вот мой код: -
Это мой 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.
Может кто-нибудь, пожалуйста, помогите, что я делаю неправильно. Из-за этого,
Я не могу идти дальше.