您的位置:

DisallowedModelAdminLookup("Filtering by %s not allowed" % key)的处理方案

  发布时间:2023-03-24 18:13:07
报错的原因异常通常是由于Django的ModelAdmin类的`list_filter`选项中指定的过滤器不允许使用特定的字段进行过滤时引发的。例如,假设你有一个`Book`模型,它有一个名为`author`的字段。我会尽力回答的。如果你的配置满足这两个条件,那么你就可以解决异常的问题了。例如,如果你的ModelAdmin类的`list_filter`选项如下所示那么你的`get_list_filter`方法就应该返回一个包含`author`和`publisher`字段的列表希望这些建议能帮到你。如何解决为了解决异常,你需要检查你的ModelAdmin类的`list_filter`选项和`get_list_filter`方法,确保它们的配置是正确的。

报错的原因

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异常。

希望这个例子能帮到你。