我要感谢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)
class LanguageStackedInline(admin.StackedInline):
model = ProductI18N
extra = 3
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
这将针对每个非默认语言生成一个表单。虽然它没有考虑到其中一个非默认语言已经保存的情况,但它为我提供了一个很好的起点。