@Bjornie
Изучаю Python

Каким образом обрабатывать поля формы?

У меня есть 3 необязательных поля, на основе которых осуществляется поиск в базе, и выдается результат.
Пытаюсь понять как лучше сделать view, если нужно проверить много полей. Прописывать if request.GET.get('', '') для каждого input или есть другой, более "джанговский" способ? А если заполнили все поля одновременно, или два из трех?

Также вопрос про организацию urls. Сейчас я сделал так: url(r'^results/', views.search_results, name='search_results'), куда подставляются query_string с параметрами. Что если я хочу сделать красивые URL при этом остается условие, параметры запроса могут быть разные - как это делается? Например, url могут быть /search/city/Moscow
/search/country/Russia
или /search/city/Moscow/country/Russia что помоему не очень круто.
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 2
@GDApsy
программирование на python;linux
Возможно стоит обратить внимание на следующее, в CBV можно писать два метода post и get:
class MyFormView(View):
    form_class = MyForm
    initial = {'key': 'value'}
    template_name = 'form_template.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            # <process form cleaned data>
            return HttpResponseRedirect('/success/')


Но можно же метод post и не реализовывать,а реализорвывать только метод get, а в нем обрабатывать у объекта запроса HttpRequest.GET свойство:https://docs.djangoproject.com/en/1.10/ref/request...
Ответ написан
Комментировать
@Deq56
Python dev, JS, CSS, Asterisk, Mikrotik
по поводу urls
url(r'^results/(?P<param1>)/(?P<param2>)/$, views.search_results, name='search_results')

подробнее https://djbook.ru/rel1.7/topics/http/urls.html#nam...

def search_results(request, param1, param2):
    pass
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы