提问人:Faizan Qureshi 提问时间:11/1/2023 更新时间:11/1/2023 访问量:35
大家好,我正在尝试在 Django 中创建现金支付逍遥游
Hello Everyone I am Trying to create Cash Payments Getaway in Django
问:
大家好,我正在尝试在 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']
** 运行此代码后,我将收到此错误 **
**请帮我做瘦的事情,请尽快解决我的问题**
答: 暂无答案
评论