大家好,我正在尝试在 Django 中创建现金支付逍遥游

Hello Everyone I am Trying to create Cash Payments Getaway in Django

提问人:Faizan Qureshi 提问时间:11/1/2023 更新时间:11/1/2023 访问量:35

问:

大家好,我正在尝试在 Django 中创建一个函数来创建现金支付,但我不能这样做,用户填写订单和选择案例付款和订单将成功发送 请帮帮我!!!

Models.py

from django.db import models
from accounts.models import Account
from store.models import Product, Variation




#  Create your views here.


class Payment(models.Model):

    PAYMENT_METHOD_CHOICES = (
        ('cash', 'Cash'),
        ('online', 'Online'),
    )

    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    payment_id = models.CharField(max_length=100)
    payment_method = models.CharField(max_length=20, choices=PAYMENT_METHOD_CHOICES)
    amount_paid = models.CharField(max_length=100)
    status = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.payment_id
    

    def __str__(self):
        return f'{self.payment_method} - {self.amount}'


class Order(models.Model):
    STATUS = {
        ('New', 'New'),
        ('Accepted', 'Accepted'),
        ('Completed', 'Completed'),
        ('Cencelled', 'Cencelled'),
    }

    user = models.ForeignKey(Account, on_delete=models.SET_NULL, null=True )
    payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, blank=True, null=True)
    order_number = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)
    phone_number = models.CharField(max_length=50)    
    address_line_1 = models.CharField(max_length=50)
    address_line_2 = models.CharField(max_length=50, blank=True)
    city = models.CharField(max_length=50)
    pin_code = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    # shope_image = models.ImageField(upload_to='photos/Shope_images')
    order_note = models.CharField(max_length=50)
    order_total = models.FloatField()
    # gst = models.FloatField()
    status = models.CharField(max_length=50, choices=STATUS, default='New')
    ip = models.CharField(blank=True, max_length=50)
    is_ordered = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def full_name(self):
        return f'{self.first_name}  {self.last_name}'

    def full_address(self):
        return f'{self.address_line_1}  {self.address_line_2}'

    def add_multiple_orders(user, orders):
        for Order in orders:
            order.user = user
        Order.objects.bulk_create(orders)

    def __str__(self):
        return self.first_name




class OrderProduct(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, blank=True, null=True)
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    variation = models.ForeignKey(Variation, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    product_price = models.FloatField()
    ordered = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)
    

    def __str__(self):
        return self.product.product_name

Viwes.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from cart.models import CartItem
from .forms import OrderForm
import datetime
from .models import Order, Payment
from django.http import HttpResponse


    

def place_order(request, total=0, quantity=0,):
   
    current_user = request.user

    cart_items = CartItem.objects.filter(user=current_user)
    cart_count = cart_items.count()
    if cart_count <= 0:
        return redirect('store')
    

    grand_total = 0
    # gst = 0
    for cart_item in cart_items:
        total += (cart_item.product.price * cart_item.quantity) 
        quantity += cart_item.quantity

    # gst = (18 * total)/100
    grand_total = total

    if request.method == 'POST':
        form = OrderForm(request.POST)

        if form.is_valid():
            data = Order()

            data.user = current_user
            data.first_name = form.cleaned_data['first_name']
            data.last_name = form.cleaned_data['last_name']
            data.phone_number = form.cleaned_data['phone_number']
            data.email = form.cleaned_data['email']
            data.address_line_1 = form.cleaned_data['address_line_1']
            data.address_line_2 = form.cleaned_data['address_line_2']
            data.country = form.cleaned_data['country']
            data.state = form.cleaned_data['state']
            data.city = form.cleaned_data['city']
            data.pin_code = form.cleaned_data['pin_code']
            data.order_note = form.cleaned_data['order_note']
            data.order_total = grand_total
            # order.gst = gst
            data.ip = request.META.get('REMOTE_ADDR')
            #order.save()

            yr = int(datetime.date.today().strftime('%Y'))
            mt = int(datetime.date.today().strftime('%m'))
            dt = int(datetime.date.today().strftime('%d'))
            d = datetime.date(yr,mt,dt)
            current_date = d.strftime("%Y%m%d")
            order_number = current_date + str(data.id)
        
            data.order_number = order_number
            data.save()
            order = Order.objects.get(user=current_user, is_ordered=False, order_number=order_number)

            context = {
                'order': order,
                'cart_items': cart_items,
                'total': total,
                'grand_total': grand_total,
                # 'gst': gst
            }
            return render(request, 'orders/payments.html', context)

        else:
            return redirect('checkout')


def payments(request, order_id):
    order = Order.objects.get(pk=order_id)
    order_total = grand_total

    # Create a new payment object with the payment method set to `cash` and the amount paid set to the order total.
    payment = Payment.objects.create(
        order=order_id,
        user=request.user,
        payment_method='cash',
        amount_paid= grand_total,
    )

    # Update the order status to `Completed`.
    order.status = 'Completed'
    order.save()

    # Return a success response to the user.
    return render(request, 'orders/payments.html')

**urls.py**

from django.urls import path
from . import views

urlpatterns = [
   path('place_order/',views.place_order, name='place_order'),
   path('payments/',views.payments, name='payments'),
   path('payments/<int:order_id>/', views.payments, name='payments'),

   
]

**Forms.py**

from django import forms
from .models import Order

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['first_name', 'last_name', 'email', 'phone_number', 'address_line_1', 'address_line_2', 'city', 'pin_code', 'state', 'country',  'order_note']

** 运行此代码后,我将收到此错误 **

enter image description here

**请帮我做瘦的事情,请尽快解决我的问题**

python-3.x python-2.7 django-views

评论

0赞 willeM_ Van Onsem 11/1/2023
什么是86号线?
0赞 Faizan Qureshi 11/1/2023
这是用户购买的金额

答: 暂无答案