【问题标题】:Django admin search_fields with model property具有模型属性的 Django 管理员搜索字段
【发布时间】:2010-09-16 17:11:51
【问题描述】:

我正在尝试将模型中的属性用作 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')

我可以将该字段称为“案例”(如示例中给出的),但这给了我一个 TypeError: Related Field has invalid lookup: icontains

当然,它与相关字段的工作方式:所以我可以使用 case__id 然后我可以使用 id 作为搜索查询。 但这对用户来说有点刺激,因为 caseid 显示不同。

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

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我会试试看,也许我会看看重写 search_query,这可能是另一种方法。
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 2014-12-01
    • 2014-10-15
    • 1970-01-01
    • 2011-05-10
    • 2021-06-07
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多