求教大神!在做django關(guān)于商城訂單提交時出現(xiàn)錯誤:save() prohibited to prevent data loss due to unsaved related object 'order'.
實在找不到原因。。希望哪位大大可以幫下。。
詳細截圖:
視圖:
class ShowOrder(View):
def get(self, request, oid):
print(u'hello')
order_main = OrderMain.objects.get(pk=oid)
address = DeliveryAddress.objects.filter(user=request.user).all()
order_detail = OrderDetail.objects.filter(order=order_main).all()
return render(request, 'shop_order/place_order.html', locals())
def post(self, request, oid):
order_main = OrderMain.objects.get(pk=oid)
order_detail = OrderDetail.objects.filter(order=order_main).all()
address_id = request.POST.get('address_id')
print(address_id)
address = DeliveryAddress.objects.get(pk=address_id)
try:
with transaction.atomic():
# 使用事務(wù)進行庫存的刪減,當其中一項出現(xiàn)錯誤時,則所有操作都將回原。
for detail in order_detail:
# 如果庫存不足則跑出異常
if detail.count < detail.goods_info.stock:
raise StockException(u'%s庫存不足' % detail.goods_info)
detail.goods_info.stock = F('stock') - detail.count
detail.goods_info.save()
order_main.receiver = address
order_main.is_pay = '1'
##############################
# 代碼就是下面這個save出錯的 #
##############################
order_main.save()
return
except StockException:
order_main.is_pay = '-1'
order_main.save()
message = u'已下單,5秒后跳轉(zhuǎn)至付款界面,您也可以點擊這里進行跳轉(zhuǎn)'
return render(request, 'shop_order/message.html', locals())
數(shù)據(jù)庫:
# 生成對應(yīng)訂單
class OrderMain(models.Model):
order_status = (
('-1', '取消'),
('0', '創(chuàng)建'),
('1', '未支付'),
('2', '已支付'),
('3', '代發(fā)貨'),
('4', '已發(fā)貨')
)
uuid = models.CharField(max_length=50, unique=True, verbose_name=u'訂單編號')
order_time = models.DateTimeField(auto_now_add=True, verbose_name=u'訂單提交時間')
pay_time = models.DateTimeField(null=True, blank=True, verbose_name=u'付款時間')
user = models.ForeignKey(UserProFiles, verbose_name=u'購買用戶')
total = models.DecimalField(null=True, max_digits=10, decimal_places=2, verbose_name=u'總價格')
is_pay = models.CharField(max_length=5, choices=order_status, default='0', verbose_name=u'訂單狀態(tài)')
receiver = models.ForeignKey(DeliveryAddress, null=True, verbose_name=u'收貨詳情')
class Meta:
verbose_name = u'訂單中心'
verbose_name_plural = verbose_name
ordering = ('-id',)
def __str__(self):
return str(self.user) + str(self.order_id)
# 訂單詳情信息
class OrderDetail(models.Model):
order = models.ForeignKey(OrderMain, verbose_name=u'訂單')
goods_info = models.ForeignKey(GoodsInfo, verbose_name=u'商品')
goods_price = models.DecimalField(max_digits=10, null=True, decimal_places=2, verbose_name=u'商品價格')
goods_total = models.DecimalField(default=0, max_digits=10, decimal_places=2, verbose_name=u'商品總價')
count = models.IntegerField(verbose_name=u'購買商品數(shù)量')
class Meta:
verbose_name=u'訂單詳情'
verbose_name_plural = verbose_name
ordering =('-id',)
def __str__(self):
return str(self.order) + str(self.goods_info)
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。