Невозможно сохранить общую стоимость заказа в базе данных - PullRequest
0 голосов
/ 06 июня 2019

Я делаю проект колледжа. Я пробую несколько дней. Но я не могу сохранить свое значение 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.

Может кто-нибудь, пожалуйста, помогите, что я делаю неправильно. Из-за этого, Я не могу идти дальше.

...