python - 用什么代替 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。谢谢 :)
解决方案
检查此链接中 on_delete 参数下的选项。您可以使用将SET_NULL
数据设置为NULL
但如所述字段应为空的选项。DO_NOTHING
是您可以做的最糟糕的事情,因为当发生删除时,数据保持原样,并且变成一个不存在的对象。
推荐阅读
- xamarin.forms - 使用 Prism NavigationService 实例化选项卡页面子视图模型的问题
- sql - 将列转置为行并用二进制替换值
- file-upload - 无法同时创建教程和上传文件
- node.js - node.js 与 mssql 服务器更新记录问题
- arrays - 初学者 - C 程序只打印二维数组的最后一行
- testing - 黄瓜标签链接
- svelte - axios api调用,从函数内部导出变量
- excel - 如何隐藏范围边界可变的范围中的行?
- javascript - 在类构造函数中初始化类实例保持发出未定义
- r - 使用 R 和 Plotly 预先计算的分位数的时间序列箱线图