使用模型的__unicode__作为管理表单中的搜索字段

时间:2012-04-15 12:45:05

标签: django django-models django-admin

有没有办法将模型的 __ unicode __ 方法包含在 search_fields 元组中?我不想在模型中创建用于存储 __ unicode __ 结果的特殊字段,因为这个值取决于其他几个模型......

2 个答案:

答案 0 :(得分:2)

不,这是不可能的,因为search_fields元组中提到的字段用于构造sql查询

查看https://github.com/django/django/blob/master/django/contrib/admin/views/main.py行349-370

UPD。那么,您可以在那里创建另一个字段并存储__unicode__方法的值。可能它看起来很丑陋而且效率低下但是这允许你过滤数据库列。 向我提供有关__unicode__方法外观的更多信息。

UPD2 您的unicode方法:

def __unicode__(self):
    return "%s%s%s%s-%s%s" % (
        self.factory.republic.code.upper(),
        self.factory.location.region and self.factory.location.region.code or '00', 
        self.factory.location.code, 
        self.factory.code, 
        self.kind.code, 
        self.code
    ) 

Django search_fields操作他的ORM方法,如果你不能执行 Catalog.objects.filter(**lookup_queries),您无法在管理员中使用search_fields执行此操作。不幸的是

对于6个表和其他程序逻辑的连接,您unicode方法非常具体。在SQL语言中搜索此字段会很复杂,并且不会使用索引。尝试将结果保存在db列中,并在相关字段更新时进行更新。

答案 1 :(得分:1)

嘿,我最近确实需要类似的东西。 正如this answer search_fields 中所述,仅适用于表示数据库中列的属性,而不适用于属性

但是,如果您的__unicode__函数取决于其他几个模型中的[字段] ,请查看 this other answer解释了如何在管理search_fields中指定related field searches,就像在Django查询集上一样。