首页 > 解决方案 > 用什么代替 DO_NOTHING 只删除一个字段?

问题描述

我想像这样链接两个模型

class t_data(models.Model):
    receiver = models.TextField()
    file_desc = models.TextField()
    file = models.FileField(upload_to='files')

另一个模型:

class transaction_detail(models.Model):
    transaction_id = models.ForeignKey(
        t_data,
        on_delete=models.DO_NOTHING,
        )
    sender=models.TextField()
    receiver = models.TextField()

*是的,我正在使用 DO_NOTHING,并且我已经读到使用它是错误的。但它不起作用。

现在,当用户尝试删除他的文件时,应该删除 t_data 对象,但 transaction_details 不应该改变。我对删除对象的看法没有什么特别的。然而,简单的例子是

def delete_request(request,id):
    requested = t_data.objects.get(id=id)
    requested.delete()
return HttpResponseRedirect('/requests')

当我尝试删除 t_data 对象时,它会引发完整性错误。

错误:

/accepted/1 FOREIGN KEY 约束失败的 IntegrityError 请求方法:GET 请求 URL: http: //127.0.0.1 :8000/accepted/1 Django 版本:3.1.7 异常类型:IntegrityError 异常值:
FOREIGN KEY 约束失败异常位置: C:\Users\ukfle\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\sqlite3\base.py,第 413 行,在执行 Python 可执行文件:C:\Users\ukfle\ AppData\Local\Programs\Python\Python39\python.exe Python 版本:3.9.1 Python 路径:
['C:\Users\ukfle\Documents\pro', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\ukfle\AppData\Local\Programs \Python\Python39\DLLs', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39\lib', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39', 'C :\Users\ukfle\AppData\Roaming\Python\Python39\site-packages', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39\lib\site-packages', 'C:\Users\ ukfle\AppData\Local\Programs\Python\Python39\lib\site-packages\win32', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39\lib\site-packages\win32\lib', 'C:\Users\ukfle\AppData\Local\Programs\Python\Python39\lib\site-packages\Pythonwin'] 服务器时间:2021 年 5 月 19 日星期三 14:05:40 +0000

如何解决?或者用什么来代替 DO_NOTHING?如果你想解决这个问题,你也可以使用 OneToOneField。谢谢 :)

标签: pythonsqldjangodatabasedjango-models

解决方案


检查此链接中 on_delete 参数下的选项。您可以使用将SET_NULL数据设置为NULL但如所述字段应为空的选项。DO_NOTHING是您可以做的最糟糕的事情,因为当发生删除时,数据保持原样,并且变成一个不存在的对象。


推荐阅读