Django Admin:StackedInline / TabularInline中的默认值

 Federer2012_554 发布于 2023-02-13 12:44

我正在创建一个网站,它需要国际化的支持。默认语言是葡萄牙语,英语和西班牙语。我正在使用django-i18nmodel,到目前为止效果很好。

当管理员想要使用django-admin创建产品时,默认情况下,我会创建3个型号为ProductI18N的内联项。

class LanguageStackedInline(admin.StackedInline):
    model = ProductI18N
    extra = 1

我想用上面提到的3种默认语言(pt-PT,en-US,es-ES)创建这3行。我知道在模型中我只能设置默认值。

Django是否提供一种简便的方法?

1 个回答
  • 我要感谢uranusjr给我有关此解决方案的提示。他的回答对我不起作用,但是这是起作用的:

    class LanguageInlineFormSet(BaseInlineFormSet):
        def __init__(self, *args, **kwargs):
            kwargs['initial'] = [
                {'name': 'pt-PT'}, {'name': 'en-US'}, {'name': 'es-ES'}
            ]
            super(LanguageInlineFormSet, self).__init__(*args, **kwargs)
    
    # Rest of the code as per @uranusjr's answer
    class LanguageStackedInline(admin.StackedInline):
        model = ProductI18N
        extra = 3    # You said you need 3 rows
        formset = LanguageInlineFormSet
    

    我保留了原样的'name'键以便于比较。

    为了更详细地说明,BaseInlineFormSet采用initial此处记录的参数:

    https://docs.djangoproject.com/en/dev/topics/forms/formsets/#formsets-initial-data

    因此,只需将其添加到kwargs重载的构造函数中即可正常工作。

    编辑:让我也分享我在我的应用程序中实际使用的代码:

    from django.conf import settings
    from django.forms.models import BaseInlineFormSet
    
    from myapp.models import MyI18N
    
    class MyI18NInlineFormset(BaseInlineFormSet):
        def __init__(self, *args, **kwargs):
            kwargs['initial'] = [{'i18n_language': lang[0]}
                                 for lang in settings.LANGUAGES
                                 if lang[0] != settings.LANGUAGE_CODE]
            super(MyI18NInlineFormset, self).__init__(*args, **kwargs)
    
    class MyI18NInline(admin.StackedInline):
        model = MyI18N
        extra = max_num = len(settings.LANGUAGES) - 1
        formset = MyI18NInlineFormset
    

    每种非默认语言都会生成一种形式。它不是完美的,因为它没有考虑已经保存一种非默认语言的情况,但这为我提供了一个很好的起点。

    2023-02-13 12:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有