したがって、私の目標は、ModelForm の ModelChoiceField クエリセットをフィルタリングして、request.user が作成した場所のみを含めることです。
私のModelFormは単純です:
class PlaceEventForm(models.ModelForm):
class Meta:
model = Event
次のようなものを追加できるようにしたいと思います。
def __init__(self, *args, **kwargs):
super(PlaceEventForm, self).__init__(*args, **kwargs)
self.fields['place'].queryset = Place.objects.filter(created_by=request.user)
ただし、ModelForm でリクエストにアクセスする方法が見つからないようです。
私の見解は次のようなものです:
class PlaceEventFormView(CreateView):
form_class = PlaceEventForm
template_name = 'events/event_create.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(PlaceEventFormView, self).dispatch(*args, **kwargs)
これが私がすべきことに近いかどうかはわかりませんが、試しました:
def get_form_kwargs(self):
kwargs = super(PlaceEventFormView, self).get_form_kwargs()
kwargs.update({'place_user': self.request.user})
return kwargs
しかし、エラーが発生しました: init () が予期しないキーワード引数 'place_user'を取得しました
これに関するアイデアはありますか?または、リクエストを ModelForm に渡す必要なく、ビューで ModelChoiceField をフィルタリングする方法を考えられる人はいますか?