See*_*her 3 django django-models django-admin
我有 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)
Run Code Online (Sandbox Code Playgroud)
现在,如果在我的 TaskAdmin 中,我使用:
list_filter = ('order__customer', )
一切正常。但如果我选择:
def get_list_filter(self, request):
return ('order__customer', )
Run Code Online (Sandbox Code Playgroud)
页面加载,但一旦我单击任何可能的客户,就会出现错误请求(400)错误页面。对我来说,这听起来像是 Django 错误,但也许我在这里做错了什么......有什么提示吗?
小智 7
我没有足够的声誉来添加评论,所以我会在这里写,即使这不是真正的答案。
看来这个主题有一个开放的票证:lookup_allowed 未能考虑动态 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)
Run Code Online (Sandbox Code Playgroud)
这明确允许将单个查找用作 url 参数。
| 归档时间: |
|
| 查看次数: |
1863 次 |
| 最近记录: |