首页 > 解决方案 > 删除具有外键约束的模型条目的问题

问题描述

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()

它给出了错误:

回溯(最近一次通话最后):文件“/home/puranjay/Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/views.py”,第 10432 行,在 update_client_type delete_client_type(user, client_type_id) 文件“/home/puranjay/ Documents/FeasOpt/new/fo_ftl_puranjay/mysite/empanelment/views.py”,第 105 行,在 delete_client_type delete_indent_models(user, clients) 文件“/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 ()

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

文件“/home/puranjay/Documents/FeasOpt/env/venv/lib/python3.6/site-packages/django/db/models/deletion.py”,第 222 行,在收集字段中。 , sub_objs, self.using)

TypeError:“NoneType”对象不可调用

标签: djangodjango-modelsforeign-keys

解决方案


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


推荐阅读