#python #django
#python #django
Вопрос:
На самом деле я хочу создать виртуальную платежную систему, но всякий раз, когда клиент хочет оплатить свой первый заказ, он проходит успешно, но во 2-й раз я сталкиваюсь с этой ошибкой.Я не знаю, почему я получаю эту ошибку, может кто-нибудь, пожалуйста, помогите мне решить эту проблему
Вот мой :
Model.py
class Customer(models.Model):
phone_number = models.CharField(max_length=100, default=1)
email = models.EmailField( default=1)
password = models.CharField(max_length=100)
coin = models.IntegerField(null=True, blank=True, default=0000.00)
# user = models.ForeignKey(User, related_name='customer', on_delete=models.CASCADE, blank=True, null=True)
def __str__(self):
return self.phone_number
class Order(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="product")
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
fname = models.CharField(max_length=100, null=True)
address = models.CharField(max_length=1000, null=True)
phone = models.CharField(max_length=12, null=True)
price = models.IntegerField()
date = models.DateField(datetime.datetime.today, null=True)
status = models.ForeignKey(Status, on_delete=models.CASCADE, blank=True, null=True)
payment_method = models.ForeignKey(PaymentMethod, on_delete=models.CASCADE, blank=True, null=True)
total = models.IntegerField(null=True, blank=True)
def save(self, *args, **kwargs):
self.total = self.price * self.quantity
return super().save(self, *args, **kwargs)
Вот мой views.py:
def post(self, request, *args, **kwargs):
customer = Customer.objects.get(id=request.session['customer']['id'])
print(customer)
try:
index, created = Order.objects.get_or_create(customer=customer)
# print(index.total)
except Order.MultipleObjectsReturned:
index = Order.objects.get(customer=customer)
# index = Order.objects.get(customer=customer)
# print(index.total)
balance = request.session['customer']['coin']
print(balance)
if balance >= index.total:
balance = balance - index.total
print(balance)
# Customer.objects.filter(id = request.session['customer']['id']).update(coin=balance)
customer = Customer.objects.get_or_create(id = request.session['customer']['id'])
customer.coin = balance
customer.save()
request.session['customer']['coin'] = balance
return HttpResponse("Remaining balance: " str(balance))
return HttpResponse("Failed")
Комментарии:
1. Это означает, что есть два заказа для одного и того же клиента, поэтому
Order.objects.get_or_create(customer=customer)
не может работать, так как есть два заказа, которые удовлетворяют заданному фильтру.2. Тот факт, что вы используете позже
Order.objects.get(..)
, не решит проблему, поскольку это вызовет ту же ошибку.3. Итак , каково же решение этой проблемы ?? @WillemVanOnsem
4. Как сказал @WillemVanOnsem — вам нужно указать, что именно вы хотите сделать… Я также добавлю дополнительное замечание о том, что ваше моделирование выглядит немного странно… Один продукт и количество в
Order
не имеет особого смысла — возможно, вам захочется подумать оOrder
том, чтобы иметь сводную и связаннуюCustomer
информацию, а также модель с именемOrderLine
или аналогичную, которая содержит продукт, количество, цену и т. Д. Со связаннымиOrder
…5. Что вам нужно сделать, так это иметь один «активный» заказ для клиента, у клиента может быть несколько «завершенных» или «отправленных» заказов, но должен быть один не завершенный заказ. Я вижу, что у вашего заказа есть атрибут status, работайте с этим.