【发布时间】:2018-03-27 08:39:34
【问题描述】:
我需要知道如何清除导致以下错误的未保存的相关数据:
save() 禁止保存,以防止由于未保存的相关对象“订单”而导致数据丢失。
我的代码按预期工作,但我未能完成订单。从那时起,任何保存新订单的尝试都会导致上述错误。我知道原因是对django.db.models.base.py 的更改,但必须有某种方法可以通过日志或其他方式清除它...
我已经尝试重新创建数据库以及 sqlflush 命令,但都没有工作。
观看次数
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import weasyprint
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.admin.views.decorators import staff_member_required
from django.core.urlresolvers import reverse
from django.conf import settings
from django.http import HttpResponse
from django.template.loader import render_to_string
from .models import OrderItem, Order
from .forms import OrderCreateForm
from cart.cart import Cart
from .tasks import order_created
# Create your views here.
@staff_member_required
def admin_order_detail(request, order_id):
order = get_object_or_404(Order, id=order_id)
return render(request, 'admin/orders/order/detail.html', {'order': order})
@staff_member_required
def admin_order_pdf(request, order_id):
order = get_object_or_404(Order, id=order_id)
html = render_to_string('orders/order/pdf.html', {'order': order})
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename="order_{}.pdf"'.format(order.id)
weasyprint.HTML(string=html).write_pdf(response, stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css')])
return response
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save(commit=False)
if cart.coupon:
order.coupon = cart.coupon
order.discount = cart.coupon.discount
order.save()
for item in cart:
OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity'])
#emptying the cart
cart.clear()
#launch celery async task
order_created.delay(order.id)
request.session['order_id'] = order.id #set order.id session
return redirect(reverse('payment:process'))
else:
form = OrderCreateForm()
return render(request, 'orders/order/create.html', {'cart': cart, 'form':form})
模型
class Order(models.Model):
first_name = models.CharField(_('first_name'),max_length=50)
last_name = models.CharField(_('last_name'),max_length=50)
email = models.EmailField(_('email'),)
address = models.CharField(_('address'),max_length=250)
postal_code = models.CharField(_('postal_code'),max_length=250)
city = models.CharField(_('city'),max_length=100)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
coupon = models.ForeignKey(Coupon, related_name='orders', null=True, blank=True)
discount = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(100)])
class Meta:
ordering = ('-created',)
def __unicode__(self):
return 'Order {}'.format(self.id)
def get_total_cost(self):
total_cost = sum(item.get_cost() for item in self.items.all())
return total_cost - total_cost *(self.discount)
class OrderItem(models.Model):
order = models.ForeignKey(Order, related_name='items')
product = models.ForeignKey(Product, related_name='order_items')
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField(default=1)
def __unicode__(self):
return '{}'.format(self.id)
def get_cost(self):
return self.price * self.quantity
表格
from django import forms
from .models import Order
class OrderCreateForm(forms.ModelForm):
class Meta:
model = Order
fields = ['first_name', 'last_name', 'email', 'address', 'postal_code', 'city']
【问题讨论】:
-
为什么你认为这是模型造成的?在我看来,错误出在您的
view方法之一中,您可以发布代码吗?我认为this 问题会让您更深入地了解您的错误 -
我已经通读过了。这就是为什么我认为这是因为模型
标签: django python-2.7