我有一个包含外键字段(地点)的表单。我已将此字段设置为使用基于 CharField 而不是 ModelChoiceField 的自定义表单字段类型,因为我希望用户能够使用自动完成文本输入。自动完成功能正在工作,如果存在外键模型的实例,我没有问题。但是,如果此 Place 实例不存在,我希望用户能够输入街道地址、城镇、州和邮编,并使用它们在我的自定义字段类型中使用 get_or_create 创建一个新 Place。我的代码是这样的:
class PlaceAutoCompleteField(forms.CharField):
def clean(self, value):
super(PlaceAutoCompleteField, self).clean(value)
place, created = Place.objects.get_or_create(name=value,
defaults={'street': self.form.cleaned_data['street'],
'town': self.form.cleaned_data['city'],
'state': self.form.cleaned_data['state'],
'zipcode': self.form.cleaned_data['zipcode']})
return place
class EventForm(forms.ModelForm):
place = PlaceAutoCompleteField()
street = forms.CharField(max_length=50)
city = forms.CharField(max_length=40)
state = USStateField()
zipcode = USZipCodeField()
class Meta:
model = Event
fields = (.....)
我收到错误消息:“PlaceAutoCompleteField”对象没有“表单”属性
我对此并不感到惊讶,但我不确定如何将表单数据传递到我的自定义字段中。有任何想法吗?