documentacion - django models select field
Django: muestra la imagen en la interfaz de administración (7)
(Estoy usando Django 1.5) Además de seguir los pasos en la respuesta aceptada, TAMBIÉN tuve que marcar la etiqueta de la imagen como "segura"
Para hacerlo, ajuste el valor de retorno con el método mark_safe del paquete django.utils.safestring.
Ejemplo de código: https://stackoverflow.com/a/14075441/1063031
django docs: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#filters-and-auto-escaping
Definí un modelo que contiene un enlace y una imagen. ¿Hay alguna manera de mostrar la imagen en la lista de elementos del modelo? Mi modelo se ve así:
class Article(models.Model):
url = models.CharField(max_length = 200, unique = True)
title = models.CharField(max_length = 500)
img = models.CharField(max_length = 100) # Contains path to image
def __unicode__(self):
return u"%s" %title
¿Hay alguna manera de mostrar la imagen junto con el título?
Puede crear un método de instancia modelo con otro nombre, permitir etiquetas HTML para su resultado y agregar este método como un campo de lista. Aquí hay un ejemplo:
Primero agregue un nuevo método devolviendo el HTML para la inclusión de la imagen:
class Article(models.Model):
...
def admin_image(self):
return ''<img src="%s"/>'' % self.img
admin_image.allow_tags = True
A continuación, agregue este método a la lista:
class ArticleAdmin(admin.ModelAdmin):
...
list_display = (''url'', ''title'', ''admin_image'')
Puede sobreescribir la vista de administrador de django para su modelo. Consulte http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates para obtener más detalles.
En un resumen, debe crear una plantilla: templates / admin / your_app / article / change_form.html Y allí agregue html para mostrar la imagen.
también puedes agregar la imagen directamente en el administrador
class ArticleAdmin(admin.ModelAdmin):
def admin_image(self, obj):
return ''<img src="%s"/>'' % obj.img
admin_image.allow_tags = True
list_display = (''url'', ''title'', ''admin_image'')
http://www.djangosnippets.org/snippets/239/
allí, además, si estás usando 1.2, puedes combinar lo anterior con campos de solo lectura.
ACTUALIZACIÓN django 2.0.6
Estaba resolviendo este problema en el último django 2.0.6 . Quería lograr una imagen en miniatura y algunos detalles más en la vista de lista en django-admin.
La imagen a continuación es mi vista de lista de administrador predeterminada.
Este es mi models.py:
from django.db import models
from django.utils.safestring import mark_safe
# Create your models here.
class Product(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places = 2, max_digits = 20, default = 00.00)
image = models.ImageField(upload_to=change_image_name, null=True, blank=True)
def image_tag(self):
if self.image:
return mark_safe(''<img src="%s" style="width: 45px; height:45px;" />'' % self.image.url)
else:
return ''No Image Found''
image_tag.short_description = ''Image''
def __str__(self):
return self.title
Tenga en cuenta que tenía que usar mark_safe () en la cadena de imágenes, de lo contrario obtendrá el código html escapado en lugar de thubnail en django-admin
Finalmente esta es mi admin.py
from django.contrib import admin
from .models import Product
# Register your models here.
class ProductAdmin(admin.ModelAdmin):
list_display = (''title'', ''description'', ''price'', ''image_tag'')
admin.site.register(Product, ProductAdmin)
Aquí también tenemos que registrar la clase ProductAdmin , no lo sabía y no funcionó.
def image_tag(self, obj):
return u''<img src="%s" />'' % obj.image
image_tag.short_description = ''Image''
image_tag.allow_tags = True
y en tu admin.py agrega:
readonly_fields = (''image_tag'',)