Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 16, 2013 13:11:33

dmc
От:
Зарегистрирован: 2010-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Поле в CreateView из сесии

Прошу помощи с решением такой задачки.

Есть модель с некоторым набором полей

class Supplier(Model):
    company = models.ForeignKey(Company)
    title = models.CharField()
    phone = models.CharField()
...

для создания CRUD я использую соответствующие классы для вьюх используя CreateView, UpdateView и т.д.

сответственно класс формы
class PurchaseSupplierForm(forms.ModelForm):
    class Meta:
        model = Supplier
        fields = ('title', 'phone', ...)  

сама эта конструкция прекрасно работает, но есть одно НО: при создании записи мне нужно чтобы в поле company прописывался параметр, хранящийся в сессии (при обновлении поле не меняется).

Подскажите пожалуйста, как это лучше сделать



Офлайн

#2 Окт. 16, 2013 13:48:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поле в CreateView из сесии

1. Можно save у формы переопределить
2. Можно во вьюхе дописывать всё что угодно

def form_valid(self, form):
    new_record = form.save(commit=false)
    new_record.company = "djcnksjanckjsdcn"
    return super(MyView, self).form_valid(form)



Офлайн

#3 Окт. 16, 2013 16:48:49

dmc
От:
Зарегистрирован: 2010-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Поле в CreateView из сесии

FishHook
1. Можно save у формы переопределить2. Можно во вьюхе дописывать всё что угодно

по п.1. - думаю что так не получится, поскольку в форме вроде как напрямую нельзя получить request, а соответственно и параметры сессии; а вот по п.2. - спасибо за подсказу, попробую.



Отредактировано dmc (Окт. 16, 2013 16:55:36)

Офлайн

#4 Окт. 16, 2013 19:53:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поле в CreateView из сесии

dmc
думаю что так не получится, поскольку в форме вроде как напрямую нельзя получить request,
Отчего же? Форма, она же не из параллельной вселенной возникает. Где то Вы создали класс этой формы, значит можете вносить какие Вам угодно изменения в этот класс. Кто не дает передавать дополнительный параметр в __init__?
И объекты этого класса, они то же создаются в Вашем коде. Передавайте в эту форму что угодно.
class PurchaseSupplierForm(forms.ModelForm):
   def __init__(self, *args, **kw):
        self.request = None
        if "request" in kw:
            self.request = kw.pop("request")

 def get_form(self, form_class):
        attrs = self.get_form_kwargs()
        attrs["request"] = self.request
        return form_class(**attrs)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version