目次
1. デフォルトの従来の方法では、写真の一例しかアップロードできません
問題: django に付属する管理者バックグラウンド管理システムでは、下図に示すように、従来の方法では写真は 1 枚しかアップロードできず、複数の写真をアップロードして追加することはできません。そこで、複数の写真をアップロードする機能を設定する必要があります。
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
上記の製品モデルが管理者バックグラウンドで設定されている場合、アップロードできる表示画像 show_img と詳細画像detail_img は 1 つだけですが、現在の要件としては、表示画像 show_img と詳細画像detail_img の両方が複数の画像をアップロードできることです。
2. 複数の写真をアップロードできる設定
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 は 1 対多の関係になり、表示画像 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后台
上記の設定後、以下に示すように、管理者の背景にアップロードできる複数の写真を表示できます。