Как передать значение из формы 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)
Вернуться на верх