DisallowedModelAdminLookup("Filtering by %s not allowed" % key)的处理方案
报错的原因
DisallowedModelAdminLookup异常通常是由于Django的ModelAdmin类的`list_filter`选项中指定的过滤器不允许使用特定的字段进行过滤时引发的。
例如,假设你有一个`Book`模型,它有一个名为`author`的字段。你在ModelAdmin类中设置了`list_filter`选项,使用了`author`字段来过滤书籍,但是你的ModelAdmin类中的`get_list_filter`方法返回了一个不包含`author`字段的列表,这样就会引发DisallowedModelAdminLookup异常。
如果你还有其他问题,请随时告诉我。我会尽力回答的。
回到DisallowedModelAdminLookup异常的解决方法,你需要检查你的ModelAdmin类的`list_filter`选项和`get_list_filter`方法,确保它们的配置是正确的。具体来说,你需要确保:
1. `list_filter`选项中的字段是可以被过滤的,也就是说它们在你的ModelAdmin类的`get_list_filter`方法中出现过。
2. `get_list_filter`方法返回的列表中的字段是可以被过滤的,也就是说它们在你的ModelAdmin类的`list_filter`选项中出现过。
如果你的配置满足这两个条件,那么你就可以解决DisallowedModelAdminLookup异常的问题了。
例如,如果你的ModelAdmin类的`list_filter`选项如下所示:
class BookAdmin(admin.ModelAdmin):
list_filter = ['author', 'publisher']
那么你的`get_list_filter`方法就应该返回一个包含`author`和`publisher`字段的列表:
class BookAdmin(admin.ModelAdmin):
def get_list_filter(self, request):
return ['author', 'publisher']
希望这些建议能帮到你。
如何解决
为了解决DisallowedModelAdminLookup异常,你需要检查你的ModelAdmin类的`list_filter`选项和`get_list_filter`方法,确保它们的配置是正确的。具体来说,你需要做以下几件事:
1. 确保你的ModelAdmin类的`list_filter`选项中的字段是可以被过滤的。也就是说,这些字段应该在你的ModelAdmin类的`get_list_filter`方法中出现过。
2. 确保你的ModelAdmin类的`get_list_filter`方法返回的列表中的字段是可以被过滤的。也就是说,这些字段应该在你的ModelAdmin类的`list_filter`选项中出现过。
3. 如果你的ModelAdmin类的`list_filter`选项和`get_list_filter`方法的配置都正确,但是你仍然遇到了DisallowedModelAdminLookup异常,那么你可能需要检查你的Django版本和GDAL版本是否兼容,并确保你已经正确安装了所有必要的库。
希望这些建议能帮到你。
使用例子
是的,下面是一个例子,它演示了如何在ModelAdmin类中正确配置`list_filter`选项和`get_list_filter`方法:
from django.contrib import admin
class BookAdmin(admin.ModelAdmin):
list_filter = ['author', 'publisher']
def get_list_filter(self, request):
# 返回一个包含所有可用于过滤的字段的列表
return self.list_filter
admin.site.register(Book, BookAdmin)
在这个例子中,我们首先在ModelAdmin类中设置了`list_filter`选项,指定了可用于过滤的字段。然后,我们定义了一个`get_list_filter`方法,返回了一个包含所有可用于过滤的字段的列表。
这样,你就可以使用`author`和`publisher`字段来过滤书籍了,而不会引发DisallowedModelAdminLookup异常。
希望这个例子能帮到你。