Django Form - 检查每个对象而不显示它们
Django Form - checking every object without showing them
我创建了两个模型:
class Country(models.Model):
name = models.CharField(verbose_name="Name of country", max_length=100, default="Australia")
number = models.IntegerField(verbose_name="number of country", default="1")
def __unicode__(self):
return self.name
class World(models.Model):
country = models.ManyToManyField(Country)
name = models.CharField(verbose_name="New Map", max_length=100)
def __unicode__(self):
return self.name
我想为用户提供在现场创建新世界的可能性,但在创建过程中他无法取消选中列表中的任何对象(必须选中每个对象但他看不到它们)。
我创建了一个 form.py:
class WorldForm(forms.ModelForm):
country = forms.ModelMultipleChoiceField(queryset = Country.objects.all(), widget=forms.CheckboxSelectMultiple())
class Meta:
model = World
fields = ('name',)
但此代码使用户可以选择对象并取消选中某些对象。怎么改?
对我来说最好的想法是当用户创建他的 "world" - 他只能输入一个世界的名称而他没有看到国家的名称,但每个对象 "Country" 都将包含在他的 "world" 。那可能吗?我怎样才能更改表单中的代码来执行类似的操作?
我认为我们可以通过覆盖 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
我创建了两个模型:
class Country(models.Model):
name = models.CharField(verbose_name="Name of country", max_length=100, default="Australia")
number = models.IntegerField(verbose_name="number of country", default="1")
def __unicode__(self):
return self.name
class World(models.Model):
country = models.ManyToManyField(Country)
name = models.CharField(verbose_name="New Map", max_length=100)
def __unicode__(self):
return self.name
我想为用户提供在现场创建新世界的可能性,但在创建过程中他无法取消选中列表中的任何对象(必须选中每个对象但他看不到它们)。 我创建了一个 form.py:
class WorldForm(forms.ModelForm):
country = forms.ModelMultipleChoiceField(queryset = Country.objects.all(), widget=forms.CheckboxSelectMultiple())
class Meta:
model = World
fields = ('name',)
但此代码使用户可以选择对象并取消选中某些对象。怎么改?
对我来说最好的想法是当用户创建他的 "world" - 他只能输入一个世界的名称而他没有看到国家的名称,但每个对象 "Country" 都将包含在他的 "world" 。那可能吗?我怎样才能更改表单中的代码来执行类似的操作?
我认为我们可以通过覆盖 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