gpt4 book ai didi

Django 管理员通过 get_list_filter 在远程字段上进行过滤

转载 作者:行者123 更新时间:2023-12-02 17:32:54 24 4
gpt4 key购买 nike

我有 3 个模型,由 FK 链接成这样的链:

class Customer(models.Model):
name = models.CharField(max_length=100)


class Order(models.Model):
name = models.CharField(max_length=100)
customer = models.ForeignKey(
'customer.Customer', on_delete=models.PROTECT)


class Task(models.Model):
name = models.CharField(max_length=100)
order = models.ForeignKey(
'order.Order', on_delete=models.PROTECT)

现在,如果在我的 TaskAdmin 中,我使用:

list_filter = ('order__customer', )

一切正常。但是如果我去:

def get_list_filter(self, request):
return ('order__customer', )

页面加载,但只要我点击任何可能的客户,就会出现 Bad Request (400) 错误页面。对我来说这听起来像是 Django 错误,但也许我在这里做错了什么……有什么提示吗?

最佳答案

我没有足够的声誉来添加评论,所以我会写在这里,即使这不是一个真实的答案。

看起来有一个关于这个主题的公开票:lookup_allowed fails to consider dynamic list_filter

您可以使用两种不同的解决方法来快速解决此问题,直到上游修复它为止:

  • 除了 get_list_filter 之外,您还可以定义 list_filter = ('order__customer',),这样该字段的查找将始终列入白名单,即使未使用(因为 get_list_filter有优先权)
  • 您可以这样覆盖 lookup_allowed:

    def lookup_allowed(self, lookup, *args, **kwargs):
    if lookup == 'order__customer__id__exact':
    return True
    return super(TaskAdmin, self).lookup_allowed(lookup, *args, **kwargs)

    这明确允许将用作 url 参数的单个查找。

关于Django 管理员通过 get_list_filter 在远程字段上进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30614986/

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