2

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

4

2 回答 2

2

不,不可能,因为search_fieldstuple中提到的字段是用来构造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
    ) 

Djangosearch_fields操作他的 ORM 方法,因此如果您无法执行 Catalog.objects.filter(**lookup_queries),您将无法search_fields在管理员中执行此操作。很遗憾。

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

于 2012-04-15T12:53:21.520 回答
1

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

但是,如果您的__unicode__功能取决于 [fields within] 其他几个模型,请查看 这个其他答案,它解释了如何在管理员 search_fields 中指定相关字段搜索,就像在 Django 查询集上一样。

于 2012-04-15T12:48:44.980 回答