Existe uma maneira para personalizar como um campo de procura na lista de resultados?
-
06-07-2019 - |
Pergunta
Existe uma maneira de personalizar a forma como um campo é exibido na lista de resultados django administrador? Por exemplo, eu gostaria de exibir uma imagem com base no valor do campo, assim como campos boolean são exibidos utilizando uma imagem em vez do valor texto.
Solução
Definir um método em sua classe admin que retorna o HTML que deseja.
class MyAdmin(admin.ModelAdmin):
list_display = ('name', 'my_image_field')
def my_image_field(self, obj)
return '<img src="/path/to/my/image/%s"/>' % obj.url
my_image_field.allow_tags = True
Outras dicas
Além do método que Daniel sugeriu, você também pode definir essa função em seu modelo como uma propriedade e, em seguida, adicioná-lo à sua list_display apenas como um campo normal:
class MyModel(models.Model):
image_field = models.ImageField(...)
@property
def my_image_field(self):
return return '<img src="%s"/>' % self.image_field.url
my_image_field.allow_tags = True
A vantagem de fazê-lo desta maneira é que a propriedade my_image_field está agora disponível de qualquer lugar que você está trabalhando com um objeto MyModel, ao invés de apenas na administração (reconhecidamente provavelmente não um caso de uso enorme para essa propriedade específica, mas definitivamente vem a calhar em outras circunstâncias).