Проблема с экспортом элементов из текущего набора форм в Django 3.2
У меня есть представление, в котором пользователь вставляет количество единиц и после нажатия кнопки submit экспортирует файл excel в файл xlsx. Я использую Django import-export для этого, НО я не знаю, как фильтровать модель CERequests, чтобы пользователь видел только то, что он только что вставил. Я реализовал фильтрацию по пользователю, но при нажатии на кнопку submits происходит фильтрация всех элементов по текущему пользователю, но отображаются все элементы (также элементы из прошлого).
Я хочу экспортировать только значения из текущего набора форм или наборов форм. Я попытался поместить created=created
в метод filter
, но это дает мне пустой файл Excel. Когда я удаляю его, он дает мне список всех CERquests, которые вставил пользователь.
Что мне нужно сделать, чтобы получить только данные из текущего набора(ов) форм?
views.py
class CostCalculator(LoginRequiredMixin, TemplateView):
template_name = 'calculator/cost_calculator.html'
def get(self, *args, **kwargs):
# Create an instance of the formset
formset = CalculatorForm(initial=[{
'author': self.request.user.email,
}])
return self.render_to_response({'ce_request_formset': formset})
# Define method to handle POST request
def post(self, *args, **kwargs):
formset = CalculatorForm(data=self.request.POST)
# Check if submitted forms are valid
if formset.is_valid():
for form in formset:
related_product = form.cleaned_data.get('related_product')
created = form.cleaned_data.get('created')
form.save()
qs = CERequest.objects.filter(related_product__title=related_product, created=created)
dataset = CERequestResource().export(qs)
response = HttpResponse(dataset.xlsx, content_type="xlsx")
response['Content-Disposition'] = 'attachment; filename=filename.xlsx'
return response
return self.render_to_response({'ce_request_formset': formset})
forms.py
class CalculatorForm(forms.ModelForm):
author = forms.CharField(required = False)
number_of_units = forms.IntegerField(help_text='Only numeric values are allowed.', min_value=0)
total_price = forms.IntegerField(widget = forms.HiddenInput(), required = False)
created = forms.DateTimeField(widget = forms.HiddenInput(), required = False)
class Meta:
model = CERequest
fields = ('author', 'related_product', 'related_component', 'number_of_units', 'total_price')
readonly_fields = ('created')
CalculatorForm = formset_factory(CalculatorForm)
models.py
class CERequest(models.Model):
author = models.CharField(max_length=255, blank=True, null=True)
related_component = models.ForeignKey(CostCalculator, on_delete=models.CASCADE, blank=True, null=True)
number_of_units = models.IntegerField(default=0)
related_product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
created = models.DateTimeField(auto_now=True)
total_price = models.IntegerField(default=0, blank=True, null=True)