1

外部キー フィールド (場所) を含むフォームがあります。ユーザーがオートコンプリート テキスト入力を使用できるようにするため、ModelChoiceField の代わりに CharField に基づくカスタム フォーム フィールド タイプを使用するようにこのフィールドを設定しました。オートコンプリートは機能しており、外部キー化されたモデルのインスタンスが存在する場合、問題はありません。ただし、この場所のインスタンスが存在しない場合は、ユーザーが住所、町、州、郵便番号を入力し、それらを使用して、カスタム フィールド タイプで 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」オブジェクトには属性「フォーム」がありません

これには驚きませんが、フォーム データをカスタム フィールドに渡す方法がわかりません。何か案は?

4

1 に答える 1

0

この種のロジックはフィールドには属しません。フォーム、特にフォームのcleanメソッドに属します。

于 2011-05-05T18:27:39.780 に答える