Tabla de contenido
1. El método convencional predeterminado solo puede cargar un ejemplo de una imagen
2. La configuración puede cargar varias imágenes
Problema: en el sistema de gestión de fondo de administración que viene con django, solo se puede cargar una imagen de manera convencional y no se pueden cargar ni agregar varias imágenes, como se muestra en la figura a continuación. ¡Entonces ahora necesita configurar la función de cargar varias imágenes!
1. El método convencional predeterminado solo puede cargar un ejemplo de una imagen
modelos modelos.py
class Product(models.Model):
"""常规商品"""
name = models.CharField(verbose_name="商品名称", max_length=50)
desc = models.TextField(verbose_name="描述")
show_img = models.ImageField(verbose_name="展示图", upload_to='images/')
detail_img = models.ImageField(verbose_name="详情图", upload_to='images/')
is_sale = models.BooleanField(verbose_name="是否上架", default=False) # 为False时是下架
is_show = models.BooleanField(verbose_name="是否展示在首页", default=True) # 为True时是展示在首页
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="最后一次修改时间")
def __str__(self):
return self.name
class Meta:
verbose_name = "常规商品"
verbose_name_plural = verbose_name
Cuando el modelo de producto anterior se configura en el fondo de administración, solo se puede cargar una imagen de visualización show_img y una imagen de detalle detail_img. El requisito actual es que tanto la imagen de visualización show_img como la imagen de detalle detail_img pueden cargar varias imágenes.
2. La configuración puede cargar varias imágenes
1. Configurar modelo models.py
class Product(models.Model):
"""常规商品"""
name = models.CharField(verbose_name="商品名称", max_length=50)
desc = models.TextField(verbose_name="描述")
# show_img = models.ImageField(verbose_name="展示图", upload_to='images/')
# detail_img = models.ImageField(verbose_name="详情图", upload_to='images/')
is_sale = models.BooleanField(verbose_name="是否上架", default=False) # 为False时是下架
is_show = models.BooleanField(verbose_name="是否展示在首页", default=True) # 为True时是展示在首页
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="最后一次修改时间")
def __str__(self):
return self.name
class Meta:
verbose_name = "常规商品"
verbose_name_plural = verbose_name
class ProductShowImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="常规商品", related_name='imgs')
show_img = models.ImageField(upload_to='show_images/', verbose_name="展示图")
detail_img = models.ImageField(upload_to='detail_images/', verbose_name="详情图")
def __str__(self):
return ""
class Meta:
verbose_name = "常规商品图"
verbose_name_plural = verbose_name
Comente la imagen mostrada show_img y la imagen detallada detail_img en el producto modelo original, agregue una clase ProductShowImage, el producto modelo y ProductShowImage tienen una relación de uno a muchos, y coloque la imagen mostrada show_img y la imagen detallada detail_img en la tabla donde se encuentra la clave foránea.
2. Configure el archivo admin.py
class ProductShowImageInline(admin.TabularInline):
model = ProductShowImage
can_delete = True
extra = 3 # 额外展示一个添加图片选项(默认就是3)
max_num = 6 # 最多添加6张图片
class ProductAdmin(admin.ModelAdmin):
"""常规商品"""
inlines = [ProductShowImageInline]
admin.site.register(Product, ProductAdmin) # 注册到admin后台
Después de la configuración anterior, puede mostrar varias imágenes que se pueden cargar en el fondo de administración, como se muestra a continuación