首页 > 解决方案 > 我们如何为 django 类字段使用 python for 循环变量?

问题描述

我正在将 ajax 数据发送到下面的视图中,我想将其保存在我创建的模型中(如下所述)。问题是,在那个模型中,我想要 26 个字段作为月份,所以我通过 for 循环中的 add_to_class 创建了它。我不知道用户将输入多少个月,所以我必须在视图中循环列表并将数据保存为:

a = '100000'
b = '120000'
c = '15000'

其中 a、b、c 是月份,其余值默认为 0。

这是模型

class sold(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    Buyer = models.ForeignKey(buyer, on_delete=models.CASCADE)
    total = models.IntegerField()
    deposit = models.IntegerField()
    balance = models.IntegerField()
    months = models.IntegerField(default=12)
    tracker = models.IntegerField()
    insurance = models.IntegerField()


def __str__(self):
    return f'{self.car} {self.Buyer} {self.total} {self.balance}

for i in ascii_lowercase:
    sold.add_to_class('%s'%i, models.CharField(default=0, max_length=255,null=True, blank=True))

注意:我用 str 和 int 尝试了 range(1, 27) 但没有成功。

视图.py

def sale_car_data(request):
    if request.method == 'POST':
        check = request.POST['car']
        # if soldTo.objects.filter(car__chasis=check).exists():
        #     return HttpResponse('Already Exist')
        if 1==1: #Some condition here
            insurance = request.POST['insurance']
            month = request.POST['month']
            installment = request.POST.getlist('installment')
            installment = [json.loads(item) for item in installment]
            sale = sold(car=pro, Buyer=buyer, total=total, deposit=deposit, balance=balance, 
            tracker=tracker, insurance=insurance, months=month, )
            sale.save()
            installment = installment[0]
            test = sold.objects.get(car=pro, Buyer=buyer)
            # also tried with inline for loop
            for month_l, j in zip(ascii_lowercase, installment):       
                #test(f'{month_l}={j}')  #field should be dynamic by the loop variable OR
                 test.month_l = j
                 test.save()
            return HttpResponse('saved')
    return HttpResponse('failed')

标签: pythondjango

解决方案


根据评论,我建议将分期付款移动到另一个模型并将其与主键或采购订单参考链接。有了这个,您可以在将来更新和处理分期付款,或者您可以单独跟踪它。

因此,您的模型将被视为这样(仅作为示例):

PurchaseID   |   Installment Month    | Status
1            |   10                   | Paid
1            |   12                   | Pending

推荐阅读