使用Django Parler实现模型翻译时预填充slug字段报错求助
解决Django-parler翻译模型中Slug预填充的错误
错误原因
你遇到的问题核心在于:默认的ModelAdmin无法识别TranslatableFields中定义的翻译字段(比如category_name、移入翻译字段后的slug),因为这些字段实际存储在关联的翻译子模型中,而非主模型本身。
解决方案:使用django-parler专属的TranslatableAdmin
django-parler提供了TranslatableAdmin类,专门用于处理翻译模型的后台管理,它能正确识别翻译字段并支持预填充配置。
情况1:Slug为全局唯一(不随语言变化)
如果希望slug在所有语言中保持一致,保留它在主模型中,修改Admin类如下:
from django.contrib import admin from parler.admin import TranslatableAdmin from .models import Category class CategoryAdmin(TranslatableAdmin): prepopulated_fields = {'slug': ('category_name',)} # 可选:配置列表显示的字段,用方法获取翻译后的名称 list_display = ('get_category_name', 'slug') def get_category_name(self, obj): return obj.category_name get_category_name.short_description = '分类名称' admin.site.register(Category, CategoryAdmin)
情况2:Slug随语言变化(每个语言独立生成)
如果需要不同语言对应不同的slug,将slug移入TranslatedFields,再配合TranslatableAdmin配置:
- 修改模型,把slug加入
TranslatedFields
from django.db import models from parler.models import TranslatableModel, TranslatedFields from django.utils.translation import gettext_lazy as _ class Category(TranslatableModel): translations = TranslatedFields( category_name = models.CharField(_('name'), max_length=50, unique=True), description = models.TextField(_('description'), max_length=255, blank=True), slug = models.SlugField(max_length=100, unique=True) ) image = models.ImageField(_('image'), default='default_category_image.jpg', upload_to='category_photos')
- 配置Admin类
from django.contrib import admin from parler.admin import TranslatableAdmin from .models import Category class CategoryAdmin(TranslatableAdmin): prepopulated_fields = {'slug': ('category_name',)} admin.site.register(Category, CategoryAdmin)
内容的提问来源于stack exchange,提问作者Ldnsky
相关产品推荐
相关产品推荐

