Django使用模型属性管理search_fields

时间:2010-09-16 17:11:51

标签: django django-admin

我正在尝试将模型中的属性用作django admin(1.2)中的字段。

以下是我的代码示例:

class Case(models.Model):
    reference = models.CharField(_(u'Reference'), max_length=70)
    client_read = models.BooleanField(default=0)

    def __unicode__(self):
        return self.case_id

    @property
    def case_id(self):
        """ unique case ID """
        number = (settings.CASE_ID_LENGTH - len(str(self.id))) * "0" + str(self.id)
        return '%(year)s%(unique_id)s' % { 
            'year': self.case_date.strftime("%y"),
            'month': self.case_date.strftime("%m"),
            'unique_id': number}

和admin.py的部分:

class OrderAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
    [...]
    search_fields = ('id','case','req_surname','req_forename','req_company')

我可以将该字段称为“case”(如示例中所示),但这会给我一个 TypeError:相关字段具有无效查找:icontains

当然它正在使用相关领域:所以我可以使用 case__id ,然后我就可以将id用作搜索查询。 但这对用户有些恼火,因为caseid显示不同。

有没有办法将case_id用作搜索查询,就像它显示的那样(年+月+ id)?

1 个答案:

答案 0 :(得分:4)

不,你不能这样使用它,因为这只适用于表示数据库中的列的属性,而不是属性。实现这项工作的唯一方法是使用contrib.admin.views.main.ChangeList的子类作为更改列表,并覆盖它的get_query_set方法以实现所需的行为!