Найти - Пользователи
Полная версия: Поле в CreateView из сесии
Начало » Django » Поле в CreateView из сесии
1
dmc
Прошу помощи с решением такой задачки.

Есть модель с некоторым набором полей
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 прописывался параметр, хранящийся в сессии (при обновлении поле не меняется).

Подскажите пожалуйста, как это лучше сделать
FishHook
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)
dmc
FishHook
1. Можно save у формы переопределить2. Можно во вьюхе дописывать всё что угодно

по п.1. - думаю что так не получится, поскольку в форме вроде как напрямую нельзя получить request, а соответственно и параметры сессии; а вот по п.2. - спасибо за подсказу, попробую.
FishHook
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB