Итак, моя цель - уметь фильтровать запрос на выбор ModelChoiceField в моей модели ModelForm, чтобы включить только те места, которые создали request.user.Отправка объекта request.user в ModelForm из общего представления класса в Django
Мои 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'
Любые идеи по этому вопросу? Или кто-нибудь может подумать о способе фильтрации моего ModelChoiceField в представлении без необходимости передавать мой запрос в ModelForm?
Большое спасибо! Работает отлично. – Brian
Проблемы с пониманием того, как вы это делаете. –
Я сделал пример завершенным, дайте мне знать, если он все еще неясен –