我用Google搜索并查看了文档,但没有找到任何内容 与此场景相关:
我有一个主/细节模型,定义如下:
class Master(models.Model):
title = models.CharField(max_length=100)
def details_url(self):
return '<a href="here comes the url linking to details">Details</a>'
details_url.short_description = 'Link to details'
details_url.allow_tags = True
class Detail(models.Model):
master = models.ForeignKey(Master)
details = models.TextField()
他们使用admin.py在管理员中公开。我的问题是:
1)如何在Master模型中创建details_url属性 当在admin.py中公开时,用户可以单击它并进入列表 详细信息,仅查看与Master-model实例相关的详细信息?
2)如果只能使用自定义视图完成此操作,我该如何获取视图 生成一个看起来像其他管理员的页面?我知道我可以使用 与管理员相同的模板代码,但有更快的方法 产生例如像我的情况中的细节列表?通用 视图/类?
3)没有为detailsAdmin-class添加master到list_filter 可能由于主记录的数量。还是......?乃至 如果有可能,我如何设置其他页面的过滤器,就像我一样 单击主模型的change_list中的链接转到详细信息 change_list,如何设置过滤设置为特定的 主模型的实例?
总之;我想要的是将change_list过滤为仅显示 与特定主记录相关的详细信息,并尽可能多地重用 管理员代码/功能库尽可能。
答案 0 :(得分:2)
在Django 1.2.4之前,您可以使用GET查询创建管理模型的过滤链接,如下所示:http://your_site.com/admin/your_app/detail/?master__id__exact=2
。
但这是一个安全漏洞,并得到了修复。现在,如果您尝试使用SuspiciousOperation
属性中未指定的查找过滤模型,则会出现list_filter
异常。
虽然有一个解决方法。 This workaround实现valid_lookups
属性,以便您可以通过URL get查询使用某些查找执行过滤,而无需在管理界面中公开这些查找。
为此,您需要在ModelAdmin上覆盖lookup_allowed()
方法。以下是示例代码,请查看上面提到的帖子以获取详细信息。
class DetailAdmin(admin.ModelAdmin):
valid_lookups = ()
def lookup_allowed(self, lookup, *args, **kwargs):
if lookup.startswith(self.valid_lookups):
return True
return super(DetailAdmin, self).lookup_allowed(lookup, *args, **kwargs)