如何在Django中设置下拉选项的值并进行一些计算?

2024-09-29 02:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为客户创建一个订单,客户必须选择数量和卡号,基于此,必须进行一些计算以获得总价(每张卡的价格*数量)。如何设置每个卡号的值(价格),然后进行计算并将总价存储在数据库中?我用的是Django 注意:每个卡号有不同的价格

forms.py

from django import forms
from .models import cardDatabase

card_number_choice = {
    (7239, 7239),
    (7227, 7227),
    (7230, 7230),
    (7217, 7217),
    (2167, 2167),
    (7214, 7214),
    (7233, 7233),
    (7237, 7237),
    (7230, 7230),
    (7229, 7229),
    (7228, 7228),
    (3730, 3730),
    (5660, 5660),
    (7224, 7224),
    (7221, 7221),
    (7241, 7241),
    (7252, 7252),
    (5642, 5642),
    (2680, 2680),
    (5659, 5659),
    (2767, 2767),
    (3718, 3718),
    (5644, 5644),
    (5645, 5645),
    (5646, 5646),
    (5665, 5665),
    (5580, 5580),
}
quantity_choices = {
    (50, 50),
    (100, 100),
    (150, 150),
    (200, 200),
    (250, 250),
}
class cardForm(forms.ModelForm):
    card_number = forms.IntegerField(help_text="ex: 7643", widget= forms.Select(choices=card_number_choice))
    content = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'placeholder': 'What do you want to write on the card!'}), max_length=3000)
    quantity = forms.IntegerField(help_text="Multiple of 50", widget=forms.Select(choices=quantity_choices))
    phone_number = forms.IntegerField(help_text="ex: +966000000000")

 class Meta:
        model = cardDatabase
        fields = ['card_number', 'quantity', 'phone_number', 'content']

views.py

from django.shortcuts import render_to_response, redirect, render
from .models import cardDatabase
from .forms import cardForm
from django.template.context_processors import csrf

def g (request):
    all_cards = cardDatabase.objects.order_by('-id')[:1]
    return render(request,'g.html',{'cards': all_cards})

def card(request):
    if request.method == "POST":
        form = cardForm(request.POST)
        if form.is_valid():
            form.save()
            try:
                return redirect('g')
            except:

                pass
    else:
        form = cardForm()
    return render(request, 'cardDa.html', {'form':form})

models.py

from django.db import models


class cardDatabase(models.Model):
        card_number= models.IntegerField(max_length=4)
        content = models.TextField(max_length=3000)
        quantity = models.IntegerField(max_length=5)
        phone_number = models.IntegerField()


Tags: djangofromimportformnumbermodelsrequestforms
1条回答
网友
1楼 · 发布于 2024-09-29 02:16:56

你在评论中说你还需要存储价格。因此,我建议使用CardOrder模型来表示卡订单的单个实例,也可以使用单独的CardType模型来表示价格

class CardType(models.Model):
    number = models.IntegerField()
    price = models.IntegerField()

class CardOrder(models.Model):
    type = models.ForeignKeyField(
        to=CardType,
        on_delete=models.PROTECT)
    content = models.TextField(
        max_length=3000)
    quantity = models.IntegerField()

    @property
    def total_price(self):
        return self.quantity * self.type.price

当然,如果您需要带小数的价格,那么使用DecimalField而不是整数

相关问题 更多 >