Django表单 - 检查每个对象而不显示它们

时间:2016-01-21 19:27:56

标签: python django django-forms

我创建了两个模型:

class WorldForm(forms.ModelForm):

    country = forms.ModelMultipleChoiceField(queryset = Country.objects.all(), widget=forms.CheckboxSelectMultiple())

    class Meta:
        model = World
        fields = ('name',)

我想让用户有可能在网站上创建新世界,但在创建过程中,他无法从列表中取消选中任何对象(必须检查每个对象,但他无法看到它们)。 我创建了一个form.py:

var finalValue = person.PersonDatas.Where(x => x.FinalValue != null);

但是这段代码为用户提供了选择对象和取消选中对象的可能性。怎么改呢?

对我来说最好的想法是当用户创造他的“世界”时 - 他只能输入一个世界名称而他没有看到国家的名字,但每个对象“国家”都将包含在他的“世界”中。那可能吗?如何更改表单中的代码以执行此类操作?

1 个答案:

答案 0 :(得分:0)

我认为我们可以通过覆盖ModelForm.save()方法来实现这一目标:

class WorldForm(forms.ModelForm):
        class Meta:
                model = World
                fields = ('name',)

        def save(self, commit=True):
            super(WorldForm, self).save(commit=False)
            is_new = not self.instance.pk
            self.instance.save()

            if is_new:
                # It's a new world. Fill it with countries!
                self.instance.country.add(*Country.objects.all())
            else:
                self._save_m2m()

            return self.instance