Добавление значения ввода пользователя в экспортируемый excel в библиотеке импорта-экспорта Django
Я пытаюсь получить значение, которое пользователь вставляет в поле IN формы под названием number_of_units
.
Как передать значение пользователя и добавить его в колонку total_price
в экспортированном файле Excel?
views.py
class ProductDetailView(LoginRequiredMixin, FormMixin, DetailView):
login_url = 'login'
redirect_field_name = 'login'
template_name = 'ProductDetailView.html'
model = Product
form_class = CalculatorForm
date_field = "publish"
month_format = "%m"
def get_context_data(self, **kwargs):
context = super(ProductDetailView, self).get_context_data(**kwargs)
context['form'] = form
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
number_of_units = form.cleaned_data['number_of_units']
filter_qs = CostCalculator.objects.filter(related_product__slug=self.kwargs['slug'])
dataset = CostCalculatorResource().export(filter_qs, number_of_units)
form.save()
response = HttpResponse(dataset.xlsx, content_type="xlsx")
response['Content-Disposition'] = 'attachment; filename=cost_calculator.xlsx'
return response
def get_success_url(self):
return reverse('product', kwargs={'slug': self.kwargs['slug']})
models.py
class CostCalculator(models.Model):
related_product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='related_product')
title_component = models.ForeignKey(CalculatorServiceComponent, on_delete=models.CASCADE, default=1)
number_of_units = models.IntegerField(default=0)
cost = models.IntegerField(default=0)
margin = models.FloatField(default=0.0)
rate = models.IntegerField(default=0)
@property
def total_price(self):
return self.cost * self.number_of_units * self.margin
resources.py
class CostCalculatorResource(resources.ModelResource):
related_product__title = Field(attribute='related_product__title', column_name='Product')
total_price = Field(attribute="total_price")
class Meta:
model = CostCalculator
fields = ('id',
'related_product__title',
'total_price'
)