【问题标题】:Problem in Deleting Model Entries having ForeignKey Constraint删除具有外键约束的模型条目的问题
【发布时间】:2019-11-22 04:40:34
【问题描述】:
class Client(models.Model):
   client_id = models.CharField(primary_key=True, max_length=255)
   name = models.CharField(max_length=255, blank=False)

class Cont(models.Model):
    contid = models.CharField(max_length=255, primary_key=True)
    Client = models.ForeignKey(Client, on_delete=models.PROTECT)

class ContractDailyIndent(models.Model):
    id = models.CharField(max_length=255, primary_key=True)
    cont = models.ForeignKey(Cont, on_delete=models.PROTECT)

class VDLContract(models.Model):
    id = models.CharField(max_length=255, primary_key=True)
    contractindent = models.ForeignKey(ContractDailyIndent, 
on_delete=models.PROTECT)

在这一行出现错误 VDLContract.objects.filter(contractindent__cont__Client__in=clients).delete()

报错:

Traceback(最近一次调用最后一次): 文件“/home/puranjay/Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/views.py”,第 10432 行,在 update_client_type delete_client_type(用户,client_type_id) 文件“/home/puranjay/Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/views.py”,第 105 行,在 delete_client_type delete_indent_models(用户,客户) 文件“/home/puranjay/Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/utility.py”,第 962 行,在 delete_indent_models 提高e 文件“/home/puranjay/Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/utility.py”,第 941 行,在 delete_indent_models VDLContract.objects.filter(contractindent__cont__Client__in=clients).delete()

文件“/home/puranjay/Documents/FeasOpt/env/venv/lib/python3.6/site-packages/django/db/models/query.py”,第 661 行,删除 收集器.collect(del_query)

文件“/home/puranjay/Documents/FeasOpt/env/venv/lib/python3.6/site-packages/django/db/models/deletion.py”,第 222 行,收集 field.remote_field.on_delete(self, field, sub_objs, self.using)

TypeError: 'NoneType' 对象不可调用

【问题讨论】:

  • 请发布完整的错误。
  • 有什么东西引用你的VDLCOntract(比如ForeignKey等)?
  • 顺便说一句,看起来是在vdl_market_object 上给出了错误,而不是上面的查询集.delete() 调用...
  • 看起来好像有东西在保护对象不被删除。可能是一个 ForeignKey 指代 VDLContract 模型。
  • 没有@WillemVanOnsem,这里不是这种情况,django 允许您在与父模型没有依赖关系时删除,即使使用了 models.PROTECT。这意味着如果他删除了与父模型相关的所有适当条目,它应该让您删除,错误不是因为任何外键约束。

标签: django django-models foreign-keys


【解决方案1】:

我尝试在我的本地机器上实现您的问题。 由于外键约束,Django会导致此错误。当您的外键依赖于其他模型时会发生这种情况,在您的情况下,VDLContract 可能依赖于需要首先删除的其他模型。

【讨论】:

  • 是的,它依赖于其他一些模型。感谢您的帮助。
  • 很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多