django admin后台管理系统中配置可上传多张图片功能

文章介绍了如何在Django的admin后台管理系统中,通过修改模型和配置admin.py文件,从原本只能上传一张图片,转变为可以上传多张展示图和详情图。主要方法是创建一个新的模型来存储多张图片,并建立与原有商品模型的一对多关系,在admin中使用TabularInline进行展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 一、默认的常规方式只能上传一张图片的示例

二、配置可上传多张图片


问题:在django自带的admin后台管理系统中常规的方式只能上传一张图片,无法上传添加多张图片,如下图。所以现在需要配置可上传多张图片的功能!

 一、默认的常规方式只能上传一张图片的示例

模型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

在以上Product模型配置到admin后台中时,展示图show_img和详情图detail_img只能各上传一张,现在的需求是展示图show_img和详情图detail_img都可以各自上传多张图片!

二、配置可上传多张图片

1,配置模型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

将原模型Product中展示图show_img和详情图detail_img注释掉,添加一个ProductShowImage类,模型Product和ProductShowImage是一对多关系,并将展示图show_img和详情图detail_img放在外键所在的表中。

2,配置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后台

经过以上配置后,即可在admin后台中显示可上传多张图片了,如下图

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湿透剪自布

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值