Как мне установить начальные данные на основе общего представления createj с классом Django с данными запроса
Я использовал универсальный createview Django для моей модели
from myproject.app.forms import PersonForm
class PersonMixin(object):
model = Person
form_class = PersontForm
class PersonCreateView(PersonMixin, CreateView):
pass
Это прекрасно работает для отображения созданного представления Person с моей пользовательской формой. Однако у меня есть поле в форме, которое я хочу предварительно заполнить значением. Я нашел этот ответ: установить начальное значение для модели в общих представлениях на основе классов
Тем не менее, мое предварительно заполненное значение исходит из профиля для request.user. Как мне получить доступ к запросу в PersonCreateView и передать его в форму?
2 ответа
В любом из методов класса вы можете получить доступ к запросу, используя self.request. Таким образом, ваш профиль пользователя будет доступен с self.request.user.
Основываясь на предоставленной вами ссылке, вы сможете использовать self.request.user в вашем методе get_initial для установки значения.
то есть.
def get_initial(self):
return { 'value1': self.request.user }
Во-первых, вам не нужно использовать там миксин. Просто укажите form_class
в PersonCreateView
; модель также не нужна, так как вы уже указали ее в form_class
(при условии, что это подкласс ModelForm
).
Относительно того, откуда получить запрос, классовые представления сохраняют его в объекте, так что вы можете сделать self.request.user внутри get_initial
или же get_form_kwargs
,