从Django中的Tabel表单计算用户输入

时间:2019-07-09 07:16:49

标签: python django-models django-forms django-templates django-views

我仍在学习如何使用Django2创建库存管理。

我有一些模型可以接收用户输入,并使用Django将其保存到数据库中。

我想计算并从填写表单的用户那里获得总价值。并希望在templates.html

中向用户显示结果

线索:

我需要从以下位置获取确切的总价格:

  • total_product * per_unit_price,并在subtotal_unit_price中显示结果。

  • per_unit_price * profit_precent(如果可能,以%表示)除以100 %,然后与per_unit_price相加/加起来,结果在新字段中,该字段可以为profit_bruto

  • profit_bruto * per_unit_product,结果将在sell_price中。

解决这个问题的正确方法是什么?

我对此documentation感到困惑。

models.py

"Stock Input"
class InputStock(models.Model):
    number_product = models.AutoField(primary_key=True)
    product_name = models.CharField(max_length=30)
    total_product = models.IntegerField()
    per_unit_product = models.IntegerField(blank=True)
    per_unit_price = models.DecimalField(max_digits=14, decimal_places=2)
    subtotal_unit_price = models.DecimalField(max_digits=14, decimal_places=2)
    profit_percent = models.IntegerField()
    sell_price = models.DecimalField(max_digits=14, decimal_places=2)



    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.nama_product

views.py

@login_required()
def InputStock(request):
    form = InputStockForm(request.POST)
    if request.method == 'POST':

        if form.is_valid():
            form.save()
            form = DaftarBarangForm()
    return render(request, 'input_data.html', {'form':form})

forms.py

class InputStockForm(forms.ModelForm):
    class Meta:
        model = InputStock
        fields = '__all__'

我该如何处理?

当前,该表单仅将数据(用户输入)保存到数据库中。不计算它们。

1 个答案:

答案 0 :(得分:0)

您可以将逻辑放在form.save()函数中。就像这样

class InputStockForm(forms.ModelForm):
    class Meta:
        model = InputStock
        fields = '__all__'

    def save(self, commit=True):
        instance = super().save(commit=False)
        # your calculate
        instance.subtotal_unit_price = instance.total_product * instance.per_unit_price
        profit_bruto  = instance.per_unit_price * instance.profit_precent
        instance. sell_price = profit_bruto * instance.per_unit_product
        if commit:
            instance.save()
        return instance