Форум сайта python.su
Делаю попытки сделать страничку с формой на CBV. Проблема в том что после отправки формы должен появляться список (с выборкой по данным из формы) и форма.
Базовый класс:
class OperationsList(object): model = Many earn = False cost = False title = '' summa = {} def get_queryset(self): qs = Many.objects.filter(users=self.request.user.id).order_by('-date') return qs def get_context_data(self, **kwargs): context = super(OperationsList, self).get_context_data(**kwargs) context['user_username'] = self.request.user.username context['e'] = self.earn context['c'] = self.cost context['title'] = self.title if self.summa['sum__sum'] is None: context['summa'] = 0 else: context['summa'] = self.summa['sum__sum'] return context
class EarnPeriods(OperationsList, FormView, ListView): form_class = forms.DateForm template_name = 'period.html' earn = True date_start = '' date_end = '' def form_valid(self, form): cd = form.clean() self.date_start = cd['date_start'] self.date_end = cd['date_end'] return super(EarnPeriods, self).form_valid(form) def get_queryset(self): self.summa = super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0).aggregate(Sum('sum')) return super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0)
Офлайн
даже страшно предположить, какие могут ошибки посыпаться А чем продиктовано столь мудрёное решение? Почему не сделать простым способом? То есть, CreateView, который будет сам показывать форму и сохранять данные в модель, но у которого в get_context_data будут выбираться записи из нужной модели?
Офлайн
Мне не нужно создание, мне нужно показать данные с определенным выбором данных.
То есть, а то я уже сам запутываюсь.
- при переходе по урл должна отображаться форма в которой нужно ввести даты
- после отправки отображается список с выборкой по датам и все та же форма
Сейчас я так думаю он мне пишет что у меня поля формы не правильно заполнены при переходе на урл.
Офлайн
(OperationsList, FormView, ListView)
Офлайн
По миксинам мало инфы на русском А мой английский безногий
Я тут понаделал, теперь у меня хотябы форма и список отображается, но при отправке формы вылазит 405 ошибка.
class EarnPeriods(OperationsList, FormMixin, ListView): form_class = forms.DateForm form = forms.DateForm template_name = 'period.html' context_object_name = 'earnings_list' earn = True now_date = datetime.date.today() date_start = now_date date_end = now_date def form_valid(self, form): self.date_start = form.clean['date_start'] self.date_end = form.clean['date_end'] return super(EarnPeriods, self).form_valid(form) def get_queryset(self): print(self.date_start) print(self.date_end) self.summa = super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0).aggregate(Sum('sum')) return super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0)
Офлайн
Переделал вот так:
class EarnPeriods(OperationsList, FormMixin, ListView): form_class = forms.DateForm form = forms.DateForm template_name = 'period.html' # context_object_name = 'earnings_list' earn = True date_start = '' date_end = '' earnings_list = {} def post(self, request): form = self.form_class(request.POST) if form.is_valid(): cd = form.clean() self.date_start = cd['date_start'] self.date_end = cd['date_end'] self.earnings_list = super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0) self.summa = super(EarnPeriods, self).get_queryset().filter(date__range=(self.date_start, self.date_end), sum__gt=0).aggregate(Sum('sum')) return render_to_response(self.template_name, {'form': form, 'e': True, 'earnings_list': self.earnings_list, 'summa': self.summa['sum__sum']}, context_instance=RequestContext(request))
Офлайн