我需要将新创建的主键传递给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 =地点(名称=``恶魔狗’‘,地址=‘944 W.富乐顿’)Restaurant.objects.create(地点=
p3,serve_hot_dogs = True,serves_pizza = False)追溯
(最近一次调用是最近的):
…
ValueError :禁止save()以防止由于未保存的相关对象“位置”而导致数据丢失。
这就是我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')
这是在Django 1.8中引入的。以前,您可以将未保存的实例分配给一对一关系,如果失败,该实例将被静默跳过。从Django
1.8开始,在这种情况下,您会收到错误消息。查看Django 1.7-> 1.8
upgrade的文档。
它说:
现在,将未保存的对象分配给ForeignKey,GenericForeignKey和OneToOneField会引发ValueError。
如果您对更多细节感兴趣,可以在中查看save
方法django.db.models.base
:某些部分:
for field in self._meta.concrete_fields:
if field.is_relation:
# If the related field isn't cached, then an instance hasn't
# been assigned and there's no need to worry about this check.
try:
getattr(self, field.get_cache_name())
except AttributeError:
continue
obj = getattr(self, field.name, None)
# A pk may have been assigned manually to a model instance not
# saved to the database (or auto-generated in a case like
# UUIDField), but we allow the save to proceed and rely on the
# database to raise an IntegrityError if applicable. If
# constraints aren't supported by the database, there's the
# unavoidable risk of data corruption.
if obj and obj.pk is None:
raise ValueError(
"save() prohibited to prevent data loss due to "
"unsaved related object '%s'." % field.name
)
最后5行是引发此错误的位置。基本上你相关的obj
未保存会obj.pk == None
和ValueError
将提高。
我试图使用inlineformset创建父模型和一些子模型。下面是我的观点。代码可以将初始Rfq模型保存到数据库中,但当它试图将行保存到InlineFormSet时会出错。这是一对多关系,但使用ForeignKey字段。 这是我的回溯
当我创建新的团队并试图将其关联到我的用户配置文件时,我发现这个错误正在显示。我想要一个团队,很多成员和只有一个创建者(或管理的团队),创建者也是小组的成员。如何将团队与用户配置文件关联? models.py views.py
我有一个数据库(和模型)情况,如下模式所示: 这是ModelSerialize: 我将这个json发送到api方法 视图中我的post_create实现: 更新 现在我得到了这个错误:django.db.models.fields.related_descriptors.relatedObjectDoesNotexist:Post没有ID。 这些是我的模型: 类PostCategory(Model
我需要知道如何清除导致以下错误的未保存的相关数据: 禁止保存()以防止由于未保存的相关对象'order'而导致数据丢失。 我的代码按预期工作,但我未能完成一个订单。此后,任何保存新订单的尝试都会导致上述错误。我知道原因是对的更改,但肯定有一些方法可以通过日志之类的方式清除这些更改...我尝试重新创建数据库和sqlflush命令,但都不起作用。 视图 模型 表格
p3=Place(name='Demon Dogs',address='944 W.Fullerton')restaurant.objects.create(Place=p3,serves_hot_dogs=true,serves_pizza=false) Traceback(最近调用为last): ... valueerror:save()禁止,以防止由于未保存的相关对象'Place'而丢失数据
Google数据丢失预防API支持.pdf还是.docx?我正在尝试在Java中对*.pdf文件做缩减,以隐藏敏感数据。 多谢!EMI