当前位置: 首页 > 知识库问答 >
问题:

禁止保存()以防止因相关对象未保存而导致数据丢失

赵朝
2023-03-14
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()

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'而丢失数据

这就是我从视图中获取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个答案

龙玄天
2023-03-14

这是在Django1.8中引入的。以前,您可以将未保存的实例分配给一对一关系,如果失败,它将被悄悄地跳过。从Django1.8开始,在这种情况下,您将得到错误消息。查看Django 1.7->1.8升级的文档。

上面写着:

将未保存的对象分配给ForeignKey、GenericForeignKey和OneToOneField现在会引发ValueError。

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
            )
 类似资料:
  • 当我创建新的团队并试图将其关联到我的用户配置文件时,我发现这个错误正在显示。我想要一个团队,很多成员和只有一个创建者(或管理的团队),创建者也是小组的成员。如何将团队与用户配置文件关联? models.py views.py

  • 我有一个数据库(和模型)情况,如下模式所示: 这是ModelSerialize: 我将这个json发送到api方法 视图中我的post_create实现: 更新 现在我得到了这个错误:django.db.models.fields.related_descriptors.relatedObjectDoesNotexist:Post没有ID。 这些是我的模型: 类PostCategory(Model

  • 我试图使用inlineformset创建父模型和一些子模型。下面是我的观点。代码可以将初始Rfq模型保存到数据库中,但当它试图将行保存到InlineFormSet时会出错。这是一对多关系,但使用ForeignKey字段。 这是我的回溯

  • 问题内容: 我需要将新创建的主键传递给同一视图中的另一个表单字段,但是出现错误。有什么建议可以使这项工作吗?看起来就像过去,这就是答案: 根据文档,这就是较新的Django版本中发生的情况 p3 =地点(名称=``恶魔狗’‘,地址=‘944 W.富乐顿’)Restaurant.objects.create(地点= p3,serve_hot_dogs = True,serves_pizza = Fa

  • 我需要知道如何清除导致以下错误的未保存的相关数据: 禁止保存()以防止由于未保存的相关对象'order'而导致数据丢失。 我的代码按预期工作,但我未能完成一个订单。此后,任何保存新订单的尝试都会导致上述错误。我知道原因是对的更改,但肯定有一些方法可以通过日志之类的方式清除这些更改...我尝试重新创建数据库和sqlflush命令,但都不起作用。 视图 模型 表格

  • 我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例: Hibernate:在作者(名字、姓氏)中插入值(?,) Hi