You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DjangoCMS的Aldryn Category中添加自定义字段并显示于后台

给Aldryn Categories的Category添加图片字段并在Admin显示

我刚好做过类似的需求,给你分享一下可行的解决方案——因为直接修改第三方包的模型不是长久之计(升级包时会丢失更改),我们用一对一关联模型的方式来扩展Category,同时定制Admin界面把图片字段整合进去:

步骤1:创建关联模型扩展Category

在你的app的models.py里,创建一个和Category一对一关联的模型,用来存储图片字段:

from django.db import models
from aldryn_categories.models import Category
from django.utils.translation import gettext_lazy as _

class CategoryImage(models.Model):
    # 和Category一对一绑定
    category = models.OneToOneField(
        Category,
        on_delete=models.CASCADE,
        related_name='image',
        verbose_name=_('关联分类')
    )
    # 图片字段,记得先安装Pillow库
    category_image = models.ImageField(
        upload_to='category_images/',  # 图片存储路径
        verbose_name=_('分类图片'),
        blank=True,
        null=True
    )

    class Meta:
        verbose_name = _('分类图片')
        verbose_name_plural = _('分类图片')

步骤2:定制Admin界面,整合图片字段

Aldryn Categories自带了Admin配置,我们需要继承它的CategoryAdmin,通过Inline的方式把图片字段加到原有的编辑表单里:

在你的app的admin.py中:

from django.contrib import admin
from aldryn_categories.admin import CategoryAdmin as BaseCategoryAdmin
from aldryn_categories.models import Category
from .models import CategoryImage

# 创建Inline组件,用来在Category编辑页显示图片字段
class CategoryImageInline(admin.StackedInline):
    model = CategoryImage
    can_delete = False  # 因为是一对一,不允许删除
    verbose_name_plural = _('分类图片')
    fields = ('category_image',)  # 只显示图片字段

# 继承原有的CategoryAdmin,添加我们的Inline
class CustomCategoryAdmin(BaseCategoryAdmin):
    # 把自定义的Inline加到原有的Inline列表里
    inlines = BaseCategoryAdmin.inlines + [CategoryImageInline]

# 先注销原有的CategoryAdmin,再注册我们自定义的版本
admin.site.unregister(Category)
admin.site.register(Category, CustomCategoryAdmin)

步骤3:完成配置并测试

  1. 先安装图片处理依赖:pip install pillow
  2. 生成迁移文件:python manage.py makemigrations
  3. 执行迁移:python manage.py migrate
  4. 重启Django服务,进入Admin后台编辑Category,就能在表单下方看到图片上传的区域了!

补充说明

  • 为什么不用直接修改Aldryn Categories的模型?因为第三方包升级时,你的修改会被覆盖,一对一关联是安全且可维护的扩展方式。
  • 如果需要在模板中调用分类图片,可以通过{{ category.image.category_image }}来访问(这里的image是我们在OneToOneField中设置的related_name)。

内容的提问来源于stack exchange,提问作者pinksharpii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:59:56