Не проверять форму если нажали кнопку
Всем привет!
Имеем:
forms.py
class PostForm(forms.ModelForm): condition = forms.ChoiceField(widget=forms.RadioSelect, choices=CONDITION_CHOICES, label='Состояние', required=True) category = forms.ModelChoiceField(widget=forms.Select(attrs={'size':'10'}), queryset=Category.objects.all(), empty_label=None, label='Категория', required=True) subcategory1 = forms.ModelChoiceField(queryset=Subcategory1.objects.all(), required=True) subcategory2 = forms.ModelChoiceField(queryset=Subcategory2.objects.all(), required=True) class Meta: model = Advert fields = ('condition', 'title', 'description', 'category', 'subcategory1', 'subcategory2')
views.py
class PostCreateView(UpdateView): model = Post form_class = PostForm template_name = 'add.html' def get(self, request, *args, **kwargs): self.object = self.get_object() form_class = self.get_form_class() form = self.get_form(form_class) return self.render_to_response(self.get_context_data(form=form)) def post(self, request, *args, **kwargs): self.object = self.get_object() form = self.get_form() #если нажимается кнопка draft if request.POST['submit']=='draft': form.instance.is_draft = 'True' self.object = form.save() return super().form_valid(form) else: pass return super().post(request, *args, **kwargs) def form_valid(self, form): form.instance.user = self.request.user self.object = form.save() return super().form_valid(form) def get_success_url(self): return reverse('index')
и шаблон с 2 кнопками
<button value="draft" type="submit" name="submit" class="button">Сохранить как черновик</button> <button value="add" type="submit" name="submit" class="button">Добавить пост</button>
Как разобраться с проверками формы и сделать такое?:
если нажата кнопка draft -> не проверяем форму и просто сохраняем
если нажата кнопка add -> проверяем форму и сохраняем только после полного заполнения
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 12:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 6:20 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 1:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 1 Т.Ж.
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
можно указать все поля, как required=False, а в методе clean сделать:
что то не выходит((
попробовал вот так:
При клике на кнопку add выдает Title не заполнен , а если нажать на draft кнопку = The Post could not be changed because the data didn't validate. и подсвечивает строку во вьюшке (self.object = form.save())
А пример дополнительной проверки можно?)) может я что то не то там пишу...
попробовал еще вот так:
Ничего не происходит, но если убрать (if 'add' in self.data:) получается как и выше... при клике на add выдает !Обязательное поле - как и надо , а если нажать на draft кнопку = The Post could not be changed because the data didn't validate. и бросает на ошибку во вьюшке
Возможно, если загуглить ошибку "could not be changed because the data didn't validate", можно было бы найти страницу, которая говорит, что надо вызвать метод "is_valid()" у формы? у вас же валидация происходит после вызова "save()"
Я бы посоветовал вам почитать документацию по формам Django - там есть ответы на большинство вопросов
ну и пока рано использовать UpdateView - если у вас не стандартная логика работы, Generic представления скрывают множество нюансов своей работы. использование сущностей более высокого уровня абстракции без понимания того, что происходит на нижних уровнях черевато "непонятными ошибками"
А если не UpdateView, то что посоветуете?
я бы посоветовал начать с функцией, потом классы (просто View), а потом, когда возникнет понимание, какие участки кода повторяются, можно переходить к Generic View.
generic view по сути просто View, в котором уже реализован тот код, который приходится писать каждый раз.
Спасибо