gpt4 book ai didi

django - Django:不允许按%filter%进行过滤

转载 作者:行者123 更新时间:2023-12-03 13:54:25 24 4
gpt4 key购买 nike

我继承了Django v1.2.4应用程序,并且正在添加一些修复和改进。在此过程中,我突然开始遇到以下错误:

SuspiciousOperation at
/hometeam/admin/players/playeryear/

Filtering by team__season__season_start_date__year not allowed

当我尝试为输入字段(通过与该字段相关联的放大镜访问)选择一个项目时,该错误会显示在管理界面 pop 窗口中。

我已打开调试功能,但无法确定此错误发生在何处或哪个最近的更改导致它开始。您可以帮助我正确地解析调试输出以跟踪导致此问题的错误过滤器吗?

players / admin.py包含以下类:
class PlayerYearAdmin(FkAutocompleteAdmin):
related_search_fields = {
'team': ('school__school',),
'player': ('first_name', 'last_name'),
}
list_display = ['player', 'team', 'player_year_in_school']
list_filter = ['team']
search_fields = ['player__first_name', 'player__last_name']
ordering = ['player__last_name', 'player__first_name']

注释掉 list_displaylist_filter语句不会改变问题。

以下是一些调试输出。我可以根据需要发布更多信息。
Request Method: GET

Request URL: http://204.232.208.57:8010/hometeam/admin/players/playeryear/?team__season__season_start_date__year=2010&team__sport__sport=Boys%20Basketball&t=id&pop=1

Django Version: 1.2.4

Exception Type: SuspiciousOperation

Exception Value: Filtering by team__season__season_start_date__year not allowed

Exception Location: /usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/contrib/admin/views/main.py in get_query_set, line 193

Python Executable: /usr/bin/python

我已经应用了 https://code.djangoproject.com/changeset/15140建议的补丁,但是补丁之后没有任何变化。任何指导将不胜感激。

最佳答案

根据Chris Adams' blog提供的说明已解决了此问题。丹尼尔·罗斯曼(Daniel Roseman)在answer中指出,Django 1.2.4引入了一项新的安全功能,该功能限制了使用“通过查询字符串进行任意跨模型查找”的能力。

此版本的解决方法是在FooAdmin中定义lookup_allowed方法(在我的情况下为“PlayerYearAdmin”),对于要启用的所有过滤器,该方法返回true。就我而言,lookup_allowed看起来像这样:

def lookup_allowed(self, key):
if key in ('team__season__season_start_date__year', 'team__sport'):
return True
return super(PlayerYearAdmin, self).lookup_allowed(key)

您也可以完全绕过安全检查,有效地声明允许所有查找。这是版本1.2.4之前的默认行为:
def lookup_allowed(self, key):
return True

可能需要注意 lookup_allowed的版本1.2.5 added a third parameter(值)。如果使用的是该版本,则可以这样定义 lookup_allowed:
def lookup_allowed(self, key, value):
if key in ('team__season__season_start_date__year', 'team__sport'):
return True
return super(PlayerYearAdmin, self).lookup_allowed(key, value)

关于django - Django:不允许按%filter%进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6441084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com