Форум сайта python.su
Добрый день!
Не могу инициализировать выпадающий список в форме класса.
Пробовал делать через initial, но на форму это никак не повлияло, а через __init__ выдает ошибку:
list indices must be integers, not str
class AddCost(CreateView): category_list = Category.objects.filter(operation_type=1) categorys = [(i.id, i.name) for i in category_list] model = Many fields = ['date', 'sum', 'comment', 'category'] # initial = {'category':categorys} def __init__(self, *args, **kwargs): category_list = Category.objects.filter(operation_type=2) categorys = [int((i.id)) for i in category_list] super(AddCost, self).__init__(*args, **kwargs) self.fields['category'].initial = categorys def form_valid(self, form): data = form.save(commit=False) if data.sum > 0: data.sum *= -1 instance = form.save(commit=True) instance.users.add(self.request.user.id) return super(AddCost, self).form_valid(form)
Офлайн
1. Покажите форму.
2. Что именно вы хотите инициализировать: набор элементов для выбора или выбранный изначально элемент в соответствии с записью в БД? ?
Офлайн
1. Форма генерится автоматом т.к. наследую CreateView и UpdateView, то есть код который выше у меня находится в файле view. Или я чего-то не понял.
2.1 При создании мне нужен набор элементов для выбора, но этот набор должен быть выборкой из БД. При обновлении UpdateView сам подставляет выбранный элемент. но и там мне тоже надо опр. набор как и при создании.
Отредактировано balalay12 (Сен. 30, 2014 08:19:23)
Офлайн
balalay12Форма может не делаться автоматом, для этого есть параметр form_class и метод get_form_class.
Форма генерится автоматом т.к. наследую CreateView и UpdateView, то есть код который выше у меня находится в файле view. Или я чего-то не понял.
class MyFom(ModelForm): def __init__(self, **kwargs): queryset = kwrgs.pop("queryset") super(MyFom, self).__init__(**kwargs) self.fields["myfield"].queryset = queryset
Офлайн
Форму создал. Все отображает как надо.
Но теперь не сохраняет и не выводит ошибки. Мои мысли по этому поводу такие, что после того как создал форму form_save уже не срабатывает и нужно писать функцию сохранения в форме?
Отредактировано balalay12 (Сен. 30, 2014 12:42:09)
Офлайн
balalay12Все должно работать, показывайте код.
form_save уже не срабатывает и нужно писать функцию сохранения в форме?
Офлайн
forms.py
class AddErnForm(forms.ModelForm): class Meta: model = Many fields = ['date', 'sum', 'comment', 'category'] def __init__(self, **kwargs): queryset = kwargs.pop("queryset") super(AddErnForm, self).__init__(**kwargs) self.fields['category'].queryset = queryset
class AddErn(CreateView): model = Many form_class = forms.AddErnForm def get_form_kwargs(self): category_list = Category.objects.filter(operation_type=1) kwargs = {'queryset':category_list} return kwargs def form_valid(self, form): instance = form.save() instance.users.add(self.request.user.id) return super(AddErn, self).form_valid(form)
Офлайн
def get_form_kwargs(self): category_list = Category.objects.filter(operation_type=1) kwargs = {'queryset':category_list} return kwargs
Офлайн
Спасибо. Сделал. Все работает. Просто до этого смотрел пример как делать и там не было строчки с super.
Офлайн
А можно через kwars инициализировать переменные в шаблоне с формой? Допустим так же передать username или чтобы менюшка была разной при использовании одного шаблона.
Офлайн