【发布时间】:2020-07-15 15:22:21
【问题描述】:
我有如下模型Offer 和OfferItem,我需要在同一模板页面上创建Offer 和OfferItem。我的问题是我想先保存offer_form 然后在itemOffer 字段上设置保存的报价记录,然后保存offeritem_form 我该怎么做?或者可能是我的模型和逻辑完全错误,如果是这样还有其他方法吗?
*我排除了HStoreField,因为我需要在同一页面保存多个OfferItems(可能我又错了我不知道)
这是我的模型等等。
模型;
class Offer(models.Model):
offerCreate = models.DateTimeField(auto_now=False, auto_now_add=True)
offerOwner = models.ForeignKey(User, on_delete=models.CASCADE)
offerNumber = models.CharField(max_length = 150)
offerCondi = models.TextField()
offerTotal = models.FloatField()
def __str__(self):
return self.offerNumber
class Meta:
verbose_name = 'Offer'
verbose_name_plural = 'Offers'
class OfferItem(models.Model):
itemOffer = models.ForeignKey('sales.Offer', on_delete=models.CASCADE)
itemName = models.CharField(max_length = 150,null=True)
itemProduct = models.ForeignKey('products.Product', on_delete=models.CASCADE)
itemLeadtime = models.CharField(max_length = 150)
itemCost = models.FloatField()
itemPrice = models.FloatField()
itemCurrency = models.ForeignKey('products.Currency', on_delete=models.CASCADE)
itemQuantity = models.IntegerField()
itemOfferprice = models.FloatField()
def __str__(self):
return self.itemName
class Meta:
verbose_name = 'OfferItem'
verbose_name_plural = 'OfferItems'
查看;
def createofferView(request):
offer_form = CreateOfferForm(request.POST or None)
offeritem_form = CreateOfferItemForm(request.POST or None)
if offer_form.is_valid() and offeritem_form.is_valid():
offer_form.save()
offeritem_form.save()
messages.success(request, 'Success!')
return redirect('offers')
return render(request, 'sales/createoffer.html',{'offer_form':offer_form,'offeritem_form':offeritem_form})
【问题讨论】:
-
只需将
save()的结果赋值给一个变量:offer = offer_form.save(); item = offeritem_form.save(commit=False); item.offer = offer; item.save()。看看docs for save()。 -
@dirkgroten 工作得很好,只是将
item.offer = offer固定为item.itemOffer = offer这就是所有请添加这个作为答案。非常感谢。 -
您的字段命名约定不好。如果模型是
Offer,为什么要在所有字段前加上offer(与OfferItem相同)?它使代码难以阅读:item.itemOffer、offer.offerNumber不易阅读,itemOffer或offerNumber是什么?我推荐item.offer和offer.number等...更清晰。 -
注意到@dirkgroten,老实说,我是这方面的新手,并且学习得越来越多。感谢您的帮助。
标签: django django-models django-forms django-views django-templates