您的位置:首页 > 大数据 > 人工智能

[Django](1093, "You can't specify target table 'fee_details_invoices' for update in FROM clause") 错误

2014-07-23 16:57 666 查看
dele_id = Fee_details_invoices.objects.filter(fee_detail_id__in=fee_id_list, return_type='2').values_list('fee_detail_id', flat=True)
Fee_details_invoices.objects.filter(fee_detail_id__in=dele_id).delete()
报错:

django.db.utils.DatabaseError: (1093, "You can't specify target table 'fee_details_invoices' for update in FROM clause")
错误分析解决:
第一行代码的意思是获取某些条件行的某个字段
第二行代码去删除这些行包含这个字段值的记录


按照文档第一行代码返回的应该是一个list啊  见文档
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]

第二行代码的输入参数也是一个list啊 见文档
Entry.objects.filter(id__in=[1, 3, 4])


为啥错了呢?
通过debug看到dele_id的结果把
dele_id
[]
type(dele_id)
<class 'django.db.models.query.ValuesListQuerySet'>
看到了把,虽然打印出来是个list的样子,其实不是list类型

解决:第二行语句把dele_id强转就行了
Fee_details_invoices.objects.filter(fee_detail_id__in=list(dele_id)).delete()
有时候是不能看表象的。
即使是动态语言,类型不一致也会出现很多坑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django queryset
相关文章推荐