在Django中访问自定义表单字段类型中的表单属性

时间:2011-05-05 17:55:52

标签: django django-forms modelform

我有一个包含foreignkey字段(Place)的表单。我已将此字段设置为使用基于CharField而非ModelChoiceField的自定义表单字段类型,因为我希望用户能够使用自动完成文本输入。自动完成工作正常,如果外键模型的实例存在,我没有问题。但是,如果Place的这个实例不存在,我希望用户能够输入街道地址,城镇,州和邮政编码,并使用这些在我的自定义字段类型中使用get_or_create创建新地点。我的代码是这样的:

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'对象没有属性'form'

我对此并不感到惊讶,但我不确定如何将表单数据传递到我的自定义字段中。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这种逻辑不属于该字段 - 它属于表单,特别是表单的clean方法。