【发布时间】:2016-10-30 04:21:57
【问题描述】:
我在 Django 中有一个现有的模型表单。 我感兴趣的字段是language_pairs 模型多项选择字段。 以下是部分参赛作品:
{
"model": "projects.LanguagePair",
"pk": 1,
"fields": {
"name": "English (en) - German (de)",
"code": "en_de"
}
},
{
"model": "projects.LanguagePair",
"pk": 2,
"fields": {
"name": "German (de) - English (en)",
"code": "de_en"
}
},
{
"model": "projects.LanguagePair",
"pk": 3,
"fields": {
"name": "French (fr) - English (en)",
"code": "fr_en"
}
表格代码:
class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ('title', 'notes', 'url', 'content')
language_pairs = forms.ModelMultipleChoiceField(queryset=LanguagePair.objects.order_by('code'))
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
initial = kwargs.setdefault('initial', {})
initial['language_pairs'] = [t.pk for t in kwargs['instance'].language_pairs.all()]
super(ProjectForm, self).__init__(*args, **kwargs)
def save(self, commit=True, user=None):
instance = super().save(commit=False)
source_languages = set()
if commit:
if user:
instance.user = user
instance.save()
instance.language_pairs.clear()
for lang in self.cleaned_data['language_pairs']:
source_languages.add(lang['code'].split("_")[0])
if len(source_languages) !=1:
raise ValidationError("You can only have one source language")
for lang in self.cleaned_data['language_pairs']:
instance.language_pairs.add(lang)
return instance
我的问题是,如果任何源语言不同(集合有多个条目),这是引发验证错误的正确位置吗?
【问题讨论】:
标签: django django-forms modelform