Python Django操作错误:解析器堆栈溢出
我的项目中有一个会计应用程序的多页表单。第一个页面允许用户选择多个债权人,第二个页面允许用户选择多个债务人,第三个页面生成一个表,以便用户可以向每个债权人输入每个债务人的信用 表单的每一页都使用相关帐户的UUID通过POST将所选数据传递到下一页,最后一页有一个submit按钮,该按钮实际在数据库中生成事务对象 当我在选择了大量债务人或债权人的情况下使用表单时,会出现一个操作错误:解析器堆栈溢出 从关于这个主题的另一个问题中,我发现我需要找到一种更精简的传输数据的方法,可能是在数据库中创建一个中间模型来保存每个页面的数据,这样每个页面只需要传递一个对象。但是,正如您从下面的错误中看到的,是帐户列表导致了溢出。此列表来自查询:Python Django操作错误:解析器堆栈溢出,python,sql,django,Python,Sql,Django,我的项目中有一个会计应用程序的多页表单。第一个页面允许用户选择多个债权人,第二个页面允许用户选择多个债务人,第三个页面生成一个表,以便用户可以向每个债权人输入每个债务人的信用 表单的每一页都使用相关帐户的UUID通过POST将所选数据传递到下一页,最后一页有一个submit按钮,该按钮实际在数据库中生成事务对象 当我在选择了大量债务人或债权人的情况下使用表单时,会出现一个操作错误:解析器堆栈溢出 从关于这个主题的另一个问题中,我发现我需要找到一种更精简的传输数据的方法,可能是在数据库中创建一个中
Account.objects.all().order_by('type')
所以我不确定这是否能解决问题
或者,我可以增加SQL解析器堆栈的大小。但是,我无法在主机系统上重新编译sqlite,因为它使用虚拟主机,而且我不是系统管理员
有什么建议吗
django调试页面中的本地vars数据如下:
__class__
<class 'Bank.views.CreateTransactionData'>
account
<Account: (User) User Z>
account_list
Error in formatting: OperationalError: parser stack overflow
all_accounts
<QuerySet [<Account: (User) User A>, <Account: (User) User B>, <Account: (User) User C>, <Account: (User) User D>, <Account: (User) User E>, <Account: (User) User F>, <Account: (User) User G>, <Account: (User) User H>, <Account: (User) User I>, <Account: (User) User J>, <Account: (User) User K>, <Account: (User) User L>, <Account: (User) User M>, <Account: (User) User N>, <Account: (User) User O>, <Account: (User) User P>, <Account: (User) User Q>, <Account: (User) User R>, <Account: (User) User S>, <Account: (User) User T>, '...(remaining elements truncated)...']>
args
()
creditor
<Account: (User) User A>
data
{'0497dfe8-37c5-4939-8dd9-b9c8093d0ae1': 'TRUE',
'07dbb8d3-cc1f-497f-ab3b-4a5d815cac3a': 'TRUE',
'0957bfcd-7c16-4559-8e23-57a057c36155': 'TRUE',
'26fed283-450b-4fe3-8ac6-84dadd67e950': 'TRUE',
'3129ffe8-0ece-4576-afed-00eeb789ad80': 'TRUE',
'517ca471-bf9a-40c6-9988-b773da21d30d': 'TRUE',
'51f4a86f-b5d8-4910-b338-b461c544016d': 'TRUE',
'5706826c-c895-4063-823f-2d98fdb012ff': 'TRUE',
'57baa54a-670a-4310-baf3-5bd0023f96a4': 'TRUE',
'61b91670-5424-4625-a964-8dd257524ee4': 'TRUE',
'6ae151ff-4e5d-4972-b6a5-16efd819c53b': 'TRUE',
'6cfecce8-95b2-468c-80d6-b52af2ed2037': 'TRUE',
'714c8d14-bc4d-47ad-9fae-88366064ade8': 'TRUE',
'79168ba9-f187-404f-968a-c9224d570d3b': 'TRUE',
'9d47c7dc-cf6c-4090-a40b-f7c85eaccc37': 'TRUE',
'9fd1e279-1b70-4ef1-8b79-98ba3d668542': 'TRUE',
'a1a11ebe-b5d5-49bf-a60f-4f33dafdc5a7': 'TRUE',
'a5909c0b-d991-4b0e-bb58-ccef7dbdf32f': 'TRUE',
'a8d74160-50bd-48ce-9862-ba48be6a4619': 'TRUE',
'b66ed030-d40b-413e-83ec-47082d3281c9': 'TRUE',
'ca50f233-8118-4e1f-a951-c6a38bd3f285': 'TRUE',
'creditor': 'a8d74160-50bd-48ce-9862-ba48be6a4619',
'csrfmiddlewaretoken': 'DwbBCOSdTpV2HhZYgCodQBpF3Ut167EAUfVc8f8AOA04PKTVI4vyn1crFwpSfTGd',
'd3040f2c-edd1-4466-878e-23aaed0e35e3': 'TRUE',
'd660841d-1268-4a6a-8b30-5d9cc8157989': 'TRUE',
'date': '2019-08-29',
'e4032076-98a7-4a4b-bfc4-d7d599056a77': 'TRUE',
'ee6880aa-dc23-4827-8598-c6a67766af61': 'TRUE',
'f0182a4c-c221-45d1-95ac-dd2012111402': 'TRUE'}
date
datetime.datetime(2019, 8, 29, 0, 0)
key
UUID('714c8d14-bc4d-47ad-9fae-88366064ade8')
kwargs
{}
request
<WSGIRequest: POST '/Bank/Transaction/Create/Data/'>
self
<Bank.views.CreateTransactionData object at 0x053836D0>
整理好了
对于其他遇到此问题的人,问题在于我提取所选帐户列表的方式
我有:
摘录债务人名单
all_accounts=Account.objects.all
account\u list=account.objects.none
对于所有账户中的账户:
key=account.account\u key
如果data.keys和data.getstrkey中的strkey=='TRUE':
帐户列表=帐户列表。联合所有帐户。筛选器帐户密钥=密钥
如果不是帐户列表。首先:检查是否未选择任何债务人
提起Http404“你的交易中必须有债务人。”抱怨
它为您选择的每个帐户创建了一个新查询
将其更改为:
摘录债务人名单
all_accounts=Account.objects.all.order_按“类型”
账户清单=[]
对于所有账户中的账户:
key=account.account\u key
如果data.keys和data.getstrkey中的strkey=='TRUE':
account\u list.appendaccount
如果不是帐户列表:检查是否未选择任何债务人
提起Http404“你的交易中必须有债务人。”抱怨
这个故事的寓意是:小心使用。联合方法。。。在你尝试从头开始建立一个会计系统之前,也许会参加一些CS讲座