2011-05-05 85 views
1

我有一个包含外键字段(Place)的表单。我设置了这个字段来使用基于CharField而不是ModelChoiceField的自定义表单字段类型,因为我希望用户能够使用自动完成文本输入。自动完成功能正在发挥作用,如果存在外键模型的实例,那么我没有任何问题。但是,如果Place的这个实例不存在,我希望用户能够输入街道地址,城镇,州和邮政编码,并使用它们在我的自定义字段类型中使用get_or_create创建新的Place。我的代码是像这样:访问Django中的自定义表单字段类型的表单属性

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”对象有没有属性“形式”

我并不感到意外,但我不能确定如何通过表单数据到我的自定义字段中。有任何想法吗?

回答

0

这种逻辑不属于现场 - 它属于窗体,特别是窗体的clean方法。

+0

我该如何在窗体清理方法中做到这一点?然后我得到错误:“无法指定”u'New Place'“:”Event.place“必须是”Place“实例。” – Brian 2011-05-05 18:53:21

相关问题