Задать вопрос
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

АААААА!

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

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

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