Django: добавить поле в ModelForm в CreateVView.form_valid

У меня есть пользователи, создающие списки на моем сайте, и я использую общий CreateView, чтобы позволить им создавать их. Одним из полей списка является владелец (тот, кто его создает).

Нет смысла просить пользователей выбрать владельца, поскольку пользователь, создающий его, уже является владельцем.

Итак, я передаю в CreateView параметр «form_class» вместо параметра «model», где form_class исключает поле владельца.

Чтобы сохранить форму, мне нужно добавить к ней владельца.

Я создал подкласс CreateView и добавил метод form_valid, но у меня возникли проблемы с этим.

До сих пор я получил

class MyCreateView(CreateView)
    form_class = ListForm

def form_valid(self, form):
    form.??? = self.request.user -->> expression of the left side
    return super(MyCreateView, self).form_valid(form)

Это должно быть что-то простое. В этой теме говорят использовать self.object.owner, но self. объект имеет тип None.

Как мне справиться с этим? Спасибо


person duduklein    schedule 22.12.2011    source источник


Ответы (1)


Вы ищете form.instance.owner = request.user, а затем звоните супер

person ojii    schedule 22.12.2011
comment
Я использую pdb сразу после вызова form_valid. self.instance возвращает DoesNotExist, а self.instance возвращает AttributeError: объект «MyCreateView» не имеет атрибута «экземпляр». ListForm также является ModelForm - person duduklein; 22.12.2011
comment
Я добавил form.instance = MyModel(), а затем form.instance.owner = self.request.user. Это работает, но когда модель сохраняется в БД, все поля в отображаемой форме пусты. - person duduklein; 22.12.2011
comment
Спасибо. На самом деле мне нужно было сделать, если form.is_valid(): form.instance.owner = request.user - person duduklein; 23.12.2011