Задать вопрос
DJWOMS1
@DJWOMS1
Веб-программист

Как можно рефакторить код?

Здравствуйте, суть в следующем.
На странице таблицей выводятся данные, у каждого столбца есть поле для поиска по нем.
Всего 5 полей. В моем случае я с помощью одной формы и префиксов добавляю 5 полей, т.е. 5 форм.
Таких таблиц будет несколько, а полей для поиска в них более 5. Получиться громоздкий код, да еще и копи-паст.
Как сделать данное решение более правильным.
Код как в данный момент выглядит views.
class ZayavkaList(LoginRequiredMixin, ListView):
    context_object_name = 'zayavka'
    queryset = Contact.objects.all().order_by('-data')
    template_name = 'contactform/zayavki.html'
    paginate_by = 10
    context = {}
    context['form_id'] = SZvonId(prefix='id')
    context['form_name'] = SZvonName(prefix='name')
    context['form_tel'] = SZvonId(prefix='tel')
    context['form_email'] = SZvonName(prefix='email')
    # Передаю 5 форм
    def get_context_data(self, **kwargs):
        context = super(ZayavkaList, self).get_context_data(**kwargs)
        context['form_id'] = SZvonId(prefix='id')
        context['form_name'] = SZvonName(prefix='name')
        context['form_tel'] = SZvonId(prefix='tel')
        context['form_email'] = SZvonName(prefix='email')
        context['form_data'] = SZvonId(prefix='data')
        return context

    def post(self, request):
        form_i = SZvonId(self.request.POST, prefix='id')
        form_n = SZvonName(self.request.POST, prefix='name')
        form_t = SZvonId(self.request.POST, prefix='tel')
        form_e = SZvonId(self.request.POST, prefix='email')
        form_d = SZvonId(self.request.POST, prefix='data')
        if form_i.is_valid() and form_i.cleaned_data['search'] != '':
            search = form_i.cleaned_data['search']
            self.context['zayavka'] = Contact.objects.filter(id = search)
        if form_n.is_valid() and form_n.cleaned_data['search'] != '':
            search = form_n.cleaned_data['search']
            self.context['zayavka'] = Contact.objects.filter(name = search)
        if form_t.is_valid() and form_t.cleaned_data['search'] != '':
            search = form_t.cleaned_data['search']
            self.context['zayavka'] = Contact.objects.filter(tel = search)
        if form_e.is_valid() and form_e.cleaned_data['search'] != '':
            search = form_e.cleaned_data['search']
            self.context['zayavka'] = Contact.objects.filter(email = search)      
        if form_d.is_valid() and form_d.cleaned_data['search'] != '':
            search = form_d.cleaned_data['search']
            self.context['zayavka'] = Contact.objects.filter(data = search)
        return render(request, self.template_name, self.context)
  • Вопрос задан
  • 218 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
anton_lazarev
@anton_lazarev
Я бы поменял class ZayavkaList на class ZayavkaSpisok
Ответ написан
@artinnok
бекенд-программист
Что? Зачем?

Не проще сделать 1 форму с 5 полями?

class FooForm(forms.Form):
    field1 = forms.IntegerField()
    field2 = forms.IntegerField()
    field3 = forms.IntegerField()
    field4 = forms.IntegerField()
    field5 = forms.IntegerField()


Почему транслит в перемешку с английским?
ZayavkaList -> RequestList

АААААА!

Прошу прощения, но Ваш код невозможно расширить, изменить, это абсолютный плохой код.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽