管理员 search_fields 中的 Django UUIDField

Posted

技术标签:

【中文标题】管理员 search_fields 中的 Django UUIDField【英文标题】:Django UUIDField in admin search_fields 【发布时间】:2018-05-20 19:28:10 【问题描述】:

在一个模型中,我有一个像这样的UUIDField

uuid = models.UUIDField(_('UUID'), primary_key=True, default=uuid.uuid4, editable=False)

在相应的管理中,我会按 uuid 值进行搜索。所以我有:

class MyAdmin(admin.ModelAdmin):

    search_fields = ('uuid',)

但是这样不会产生任何结果。我需要考虑一下吗? 我使用 Django 1.11

【问题讨论】:

【参考方案1】:

当通过list_display 在管理站点中显示 UUIDField 时,也可能在其他地方显示,Django 使用破折号格式化 UUID,因此您可能使用破折号进行搜索。但是,它在数据库中存储时没有破折号,如果您在没有破折号的情况下进行搜索,它应该可以按预期工作。

如果您不喜欢 list_display 输出中的差异,您可以考虑更改其显示方式(未经测试):

class MyModel(models.Model):
    uuid = models.UUIDField(_('UUID'), primary_key=True, default=uuid.uuid4, editable=False)

    def clean_uuid(self):
        return self.uuid.replace('-', '')

class MyAdmin(admin.ModelAdmin):
    list_display = ('clean_uuid',)
    search_fields = ('uuid',)

【讨论】:

好回答。还有一件事。您可以用户替换字符串,因此您已将 UUID 转换为字符串,例如return str(self.uuid).replace('-', '') 最好使用self.uuid.hex ;)

以上是关于管理员 search_fields 中的 Django UUIDField的主要内容,如果未能解决你的问题,请参考以下文章

Django admin:在 search_fields 中使用一对一的关系

dgango中admin下添加搜索功能

dgango中admin下添加搜索功能

django使用search_fields报错

使用 sorl 的 django 管理面板中的缩略图

Django网站管理--ModelAdmin