1
ユーザーが日付範囲を入力するフォームを作成しました。一度投稿すると、誕生日がその日付範囲内にあるすべての人のデータベースからリストを返す必要があります。私はDjangoをかなり新しくしていますが、私の "start_date & end_date"をkwargsとしてListViewに渡す方法を理解していません。フォーム照会結果をリストビューに表示する方法
views.py:
class BirthdaysRangeFormView(FormView):
template_name = 'snippets/date_selection_form.html'
form_class = datefilterform
def get_form_kwargs(self):
kwargs = super(BirthdaysRangeFormView, self).get_form_kwargs()
kwargs ['request'] = self.request
return kwargs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = "Date Selection"
context['header'] = "Please select date range"
return context
def form_valid(self, form):
self.start_date = (form.cleaned_data['start_date'], People.next_birthday)
self.end_date = (form.cleaned_data['end_date'], People.next_birthday)
return self.redirect_to_results()
def redirect_to_results(self):
self.success_url = "dates:birthdays"
return redirect(
self.get_success_url(),
)
class BirthdaysListView(BirthdaysRangeFormView, ListView):
template_name = 'dates/birthdays.html',
context_object_name = "person"
person = True
# queryset = People.objects.order_by('next_birthday')
def get_queryset(self):
test = ''
forms.py:
class datefilterform(forms.Form):
model = People
start_date = forms.DateField(
input_formats=['%d/%m/%Y'],
widget=DateTimePicker(
options={"format": "DD/MM/YYYY", "pickTime": False})
)
end_date = forms.DateField(
input_formats=['%d/%m/%Y'],
widget=DateTimePicker(
options={"format": "DD/MM/YYYY", "pickTime": False})
)
People.next_birthday = start_date
People.next_birthday = end_date
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(datefilterform, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'main_form'
self.helper.form_class ='form-horizontal'
self.helper.label_class = 'col-lg-3'
self.helper.field_class = 'col-lg-8'
self.helper.layout = Layout(
'start_date',
'end_date',
FormActions(
Submit('submit', 'Submit'),
Button('cancel', 'Cancel', css_class='cancel')
)
)
def clean(self):
cleaned_data = super().clean()
start_date = cleaned_data.get("start_date")
end_date = cleaned_data.get("end_date")
if not check_end_date(start_date, end_date):
raise forms.ValidationError(
"Incorrect Dates entered, End date must be after start date"
)
私は前に簡単なリストビューを行ってきたが、私は、クラスベースのビューで "要求" を使用する方法を理解していません。
私はあなたのようなもので何を意味するのか理解していない、それはデフget_querysetに行くか、DEFなどを取得する必要がない私は、 'self.request = kwargs.get(「START_DATE」を試すために使用さでしたが、) ' ' 'self.request = kwargs.get( 'end_date'、 month_end(timezone.now))は、 ())。日付()。strftime( '%Y-%m-%d') ) 'これはこれらの行に沿ったものでしょうか? –
あなたは1つのビューから次のビューを呼び出していますか?それは悪い練習です@LewisCollins 私は上記のコードを用意しました。彼があなたに役立つかもしれません。 –
上記のコードから、私はそれを一度にすべて渡すことができるとは思わない –