【发布时间】:2016-02-23 15:13:36
【问题描述】:
我需要将新创建的ModelForm 中的主键传递到同一视图中的另一个表单字段,但出现错误。有什么建议可以完成这项工作吗?
看起来过去,这将是答案:
def contact_create(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse(contact_details, args=(form.pk,)))
else:
form = ContactForm()
从文档来看,这是在较新的 Django 版本> 1.8.3中发生的事情
p3 = Place(name='Demon Dogs', address='944 W. Fullerton') Restaurant.objects.create(place=p3, serving_hot_dogs=True, serving_pizza=False)
回溯(最近一次通话最后一次):
...
ValueError: save() 被禁止以防止由于未保存的相关对象'place'而导致数据丢失。
这就是我从视图中获取pk 的方式:
my_id = ""
if form.is_valid():
# deal with form first to get id
model_instance = form.save(commit=False)
model_instance.pub_date= timezone.now()
model_instance.user= current_user.id
model_instance.save()
my_id = model_instance.pk
if hourformset.is_valid():
hourformset.save(commit=False)
for product in hourformset:
if product.is_valid():
product.save(commit=False)
product.company = my_id
product.save()
else:
print(" modelform not saved")
return HttpResponseRedirect('/bizprofile/success')
【问题讨论】:
-
有几件事:1)为什么将 model_instance.user 设置为 current_user.id 而不仅仅是 current_user,2)与 product.company = my_id 而不是 product.company = model_instance 相同,以及 3 ) 你得到的错误是什么(是你引用的 ValueError 吗?)以及代码的哪一行?
-
错误总是在 product.save() 处。
-
save() 禁止以防止由于未保存的相关对象“公司”而导致数据丢失。我已经采纳了你的建议。
-
我建议在保存产品时使用 pdb 或 print 语句来确定 my_id(或 model_instance)是什么。即使 form.is_valid() 为 False,该代码中也可能尝试保存产品。
-
模型到底是在什么时候保存的?我实际上已连接到 psql 服务器,我可以用主键确认第一个表单数据存在。