Как мне установить начальные данные на основе общего представления 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,

Другие вопросы по тегам