Как передать значение из формы django в Excel?
У меня есть модель со статическими значениями, которые я хочу использовать в своих методах модели, и 1 столбец со значениями, которые пользователь должен вставить, называемый number_of_units
.
Я хочу экспортировать CostCalculator
, но значение в колонке number_of_units
должно быть взято из формы Django, а не из модели.
Как экспортировать значение из number_of_units
в колонку Excel?
Форма успешно сохраняется, и я могу видеть значение из формы в панели администратора, но в Excel я вижу значение 0 во всех строках. Кажется, что он принимает только фиксированные значения, которые есть в модели, но не принимает значения из формы. Как это исправить и передать значение из формы в Excel?
forms.py
class CalculatorForm(forms.ModelForm):
number_of_units = forms.IntegerField(min_value=0)
class Meta:
model = CostCalculator
fields = ('number_of_units',)
resources.py
class CostCalculatorResource(resources.ModelResource):
related_product__title = Field(attribute='related_product__title', column_name='Product')
number_of_units = Field(attribute='number_of_units')
class Meta:
model = CostCalculator
models.py
class CostCalculator(models.Model):
related_product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True, related_name='related_product')
title_component = models.ForeignKey(CalculatorServiceComponent, on_delete=models.CASCADE, default=1)
number_of_units = models.IntegerField(default=0)
views.py
class ModelDetailView(FormMixin, DetailView):
model = Product
form_class = CalculatorForm
template_name = 'ModelDetailView.html'
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
Проблема заключается в следующих строках:
dataset = CostCalculatorResource().export(filter_qs, number_of_units)
form.save()
Вы сначала пытаетесь прочитать базу данных, а затем сохранить модель. Поскольку значение по умолчанию для параметра number_of_units равно нулю, вы получаете все нули. Попробуйте сначала сохранить форму, а затем обратиться к базе данных.
form.save()
dataset = CostCalculatorResource().export(filter_qs, number_of_units)