我有这个型号:
class SearchPreference(models.Model):
"""Saves the preferred location and school_type of the User
"""
user = models.OneToOneField(User, related_name='search_preference')
location = models.ForeignKey(Location, null=True)
school_type = models.ForeignKey(SchoolType, null=True)
class Meta:
app_label = 'grants'
以及此表格:
class SearchPreferenceForm(forms.ModelForm):
location = forms.ChoiceField(queryset=Location.objects.all(),
to_field_name='slug',
required=False)
school_type = forms.ChoiceField(queryset=SchoolType.objects.all(),
to_field_name='slug',
required=False)
class Meta:
model = SearchPreference
fields = ('location', 'school_type')
我正在尝试使用该表单来验证POST数据,我没有在模板中显示它。
问题是,POST数据可以包含Location或SchoolType表中的值,因此表单不会验证。价值是“全部”,表示所有地点'或者'所有学校类型',我真的希望将其保存为没有位置的SearchPreference,即location = null。
我可以改变所有'到一个空值,这可能有效,但验证/逻辑已移出表单。
我以为我可以使用empty_value =' all'但这不适用于modelChoiceField。
有没有办法做到这一点?
答案 0 :(得分:1)
您的模型也需要blank=True
和null=True
location = models.ForeignKey(Location, blank=True, null=True)
school_type = models.ForeignKey(SchoolType, blank=True, null=True)
This发表关于空白和空白的讨论。
答案 1 :(得分:0)
这最终有效:
class SearchPreferenceForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SearchPreferenceForm, self).__init__(*args, **kwargs)
self.fields['location'].empty_values.append('all')
self.fields['school_type'].empty_values.append('all')