Django-filter - объект 'FormSet' не имеет атрибута 'model'
Я использую django-filter для создания функциональности поиска на моей странице. Однако вместо элементов из конкретной модели я хочу фильтровать значения, которые я отображаю в начальном методе в моей RequestFormset
, чтобы после загрузки страницы отображались все значения из модели Components
и пользователь мог вставить количество единиц через поле ввода
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как интегрировать мой набор форм и библиотеку django-filter. Есть ли у вас идеи, как я могу достичь чего-то подобного?
views.py
class CostCalculatorView(TemplateView):
template_name = "cost_calculator.html"
def get(self, *args, **kwargs):
get_components = Components.objects.all()
get_datetime = timezone.now().strftime('%Y-%m-%dT%H:%M:%S')
formset = RequestFormset(initial=[{
'author': self.request.user.email,
'related_product': component.related_product,
'related_component': component.id,
'created': get_datetime,
'number_of_units': 0
} for component in get_components])
filterForm = RequestFilter(self.request.GET,queryset=formset) # how to pass values from initial mwthod here?
formset = filterForm.qs
return self.render_to_response(
{'calculator_formset': formset,
'filterForm': filterForm,
})
def post(self, *args, **kwargs):
formset = RequestFormset(data=self.request.POST)
if formset.is_valid():
for form in formset:
created = form.cleaned_data.get('created')
qs = Requests.objects.filter(author=self.request.user, created=created)
form.save()
dataset = RequestResource().export(qs)
response = HttpResponse(dataset.xlsx, content_type="xlsx")
response['Content-Disposition'] = 'attachment; filename=CE_{created}.xlsx'.format(created=created)
return response
filters.py
class RequestFilter(django_filters.FilterSet):
class Meta:
model = CERequest
fields = ('related_product', 'related_component')
forms.py
class RequestForm(forms.ModelForm):
author = forms.CharField(widget = forms.HiddenInput(), required = False)
created = forms.DateTimeField(widget = forms.HiddenInput(), required = False)
number_of_units = forms.IntegerField(min_value=0)
total_price = forms.IntegerField(widget = forms.HiddenInput(), required = False)
class Meta:
model = Request
fields = ('author', 'created', 'related_product', 'related_component', 'number_of_units')
RequestFormset = formset_factory(RequestForm, extra=0, can_delete=False)