管理search_fields中的Django UUIDField

时间:2017-12-06 19:49:49

标签: python django django-models django-admin django-orm

在模型中我有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 个答案:

答案 0 :(得分:2)

当通过list_display在管理站点中显示UUIDField时,也可能在其他地方显示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',)