Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Python Django Разместил проект на хостинге, выдает ошибку https://www.cyberforum.ru/ python-django/ thread2428792.html
Запустил проект на pythonanywhere. Данная функция выдает ошибку, когда отправляешь форму, хотя на пк на виртуальном сервере все работает def post_create(request): if request.method == "POST":....
Python Django Ошибка 'function' object has no attribute 'id'
Добрый вечер. Пытаюсь выполнить лабораторные работы по методичке, однако либо что-то упустил, либо в методичке косяк. По заданию необходимо создать собственную форму для написания новой статьи....
Python Django Как разместить проект на хостинге
Написал простое веб-приложение на Django 2. Как мне теперь его разместить на хостинге?
Python Django Почему не обновляются стили css в django .vniz { margin-top:0px; } я давно удалил но он все еще есть. .vnizz { margin-top:90px; }а при изменении значения margin-top:100px; в файле style.css нечего не меняется хотя в браузере если... https://www.cyberforum.ru/ python-django/ thread2427580.html
Python Django Ошибка "Сбой ограничения NOT NULL" при добавлении поста https://www.cyberforum.ru/ python-django/ thread2426314.html
На странице юзера есть форма для написания поста, и по идее этот пост должен отображаться только на странице автора, но когда пытаюсь запостить написанный пост, то возникает ошибка ( IntegrityError...
Сохранение формы с изображениями без перезагрузки страницы, ajax Python Django
class IdentificationForm(forms.ModelForm): class Meta: model = RequestUser fields = ('main_photo', 'profile_photo', ) def clean_image(self): .... def...
Как реализовать Вход на сайт если уже существует база данных с маил и паролем Python Django
Как реализовать вход на сайт ? Я читал что у django все готово нужно только подключить но там сохраняется только маил и пароль а мне нужно много чего сохранить. Я правильно понимаю регистрация это же...
Python Django Не сохраняется информация в базу данных Все работало пока я не захотел все красиво оформить. Ошибок никаких не выводит. И как выровнить форму загрузки ? /////////////////////////////html {% extends "mainApp/wrapper.html" %} {%... https://www.cyberforum.ru/ python-django/ thread2425918.html
Python Django Как правильно реализовать базу данных https://www.cyberforum.ru/ python-django/ thread2425493.html
Пишу дипломную работу и я застрял на одном месте. Мне нужно создать сайт где студенты просле оканчания сессии выставляют свои оценки. И должно получится что у каждой группы свои таблицы с ФИО...
Python Django Слетели кнопки панели Navbar- вроде все правильно, но не работает( Здравствуйте уважаемые гуру ... Изначально при написании - все строго по уроку кнопки Регистрация и Войти почему то были под надписью Главная и Про нас. Сейчас добавили условие if - по итогу... https://www.cyberforum.ru/ python-django/ thread2423919.html
959 / 516 / 221
Регистрация: 15.01.2019
Сообщений: 1,979
Записей в блоге: 1
0

Как работать с formset в CBV?

01.04.2019, 20:00. Просмотров 470. Ответов 4
Метки (Все метки)

Есть форма ProductCreateForm, нужно добавить в неё форму SpeciallyPriceForm. Как я понял, это решается с помощью формсетов.
Никак не удаётся обработать их в данном представлении(

Имеется представление в виде CBV. Нужно как-то добавить в него formset с обработкой формы SpeciallyPriceForm
Если я верно понимаю, то нужно в методе get формировать основную форму с форместом, а затем уже в post их обрабатывать..
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class ProductsCreate(CreateView):
    model = Product
    form_class = ProductCreateForm
    http_method_names = ['get', 'post']
 
    def get_form_kwargs(self):
        kwargs = super(ProductsCreate, self).get_form_kwargs()
        kwargs['request'] = self.request
        return kwargs
 
    def get(self, request, *args, **kwargs):
        self.object = None
        if kwargs.get('slug'):
            category = Category.objects.filter(slug=kwargs.get('slug')).first()
            self.initial.update({'category': category})
        return self.render_to_response(self.get_context_data())
 
    def post(self, request, *args, **kwargs):
        self.object = None
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
 
    def form_valid(self, form):
        product = form.save(commit=False)
        product.user = self.request.user
        product.save()
        location = form.instance.get_absolute_url()
        if self.request.is_ajax():
            return JsonResponse({'success': True, 'location': location})
        else:
            return redirect(location)
 
    def form_invalid(self, form):
        errors = dict([(k, v[0]) for k, v in form.errors.items()])
        if self.request.is_ajax():
            return JsonResponse({'success': False, 'errors': errors})
Добавлено через 2 часа 52 минуты
Вот, какая штука.
Формсет удалось создать
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    def get_context_data(self, *args, **kwargs):
        ctx=super(ProductsCreate, self).get_context_data(*args, **kwargs)
        ctx['special_form'] = SpeciallyPriceForm()
        return ctx
 
    def get(self, request, *args, **kwargs):
        self.object = None
        if kwargs.get('slug'):
            category = Category.objects.filter(slug=kwargs.get('slug')).first()
            self.initial.update({'category': category})
        return self.render_to_response(self.get_context_data())
 
 
    def post(self, request, *args, **kwargs):
        self.object = None
        form = self.get_form()
        special_form = SpeciallyPriceForm(self.request.POST)
        print(special_form)
        if form.is_valid() and special_form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
Но столкнулся с новой проблемой.
Когда в методе post пытаюсь посмотреть полученные с формы данные, получаю ошибку

Проблема заключается в том, что в форме я ссылаюсь на модель записи с таблицы category, но ссылаюсь не напрямую, а через таблицу providers следующим образом.

Python
1
2
3
4
def __init__(self, *args, **kwargs):
        user = self.request.user
        provider = Provider.objects.filter(user=user.id).last()
        self.fields['category'] = ModelMultipleChoiceField(queryset=provider.category.all())
у provider связь MTM с category. У product - FK с category.

Получаю данные в методе clean() в форме.

Python
1
2
3
def clean(self):
    cleaned_data = super(ProductCreateForm, self).clean()
    cd_category = cleaned_data.get('category')
Тут норм данные проходят.

Но когда в методе post пытаюсь посмотреть полученные с формы данные, получаю ошибку
Cannot assign "<QuerySet [<Category: Еда>, <Category: Мебель>]>": "Product.category" must be a "Category" instance.

Python
1
2
3
4
def post(self, request, *args, **kwargs):
    self.object = None
    form = self.get_form()
    print(form)                                                 #Здесь ошибка
Видимо, теперь Джанго считает, что это данные из таблицы "Provider", а не с "Category"...

Вернуться к обсуждению:
Как работать с formset в CBV?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2019, 20:00
Готовые ответы и решения:

CBV возврат значений из HTML
Добрый вечер товарищи! Помогите разобраться с CBV пытаюсь освоить замену функций классами, вот что...

Django admin formset
который час подряд бьют над капризами руководства... и никак не выходит ... собственно проблема:...

Изменение django formset после сохранения
Здравствуйте, Я использовал django-dynamic-formset для динамического добавления форм на странице....

Передача параметров из формы в FormSet (в конструкторе)
Задача: организовать передачу параметров из формы в набор форм с помощью переменных. Из одной формы...

4
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.