【问题标题】:Deposit amount using Django使用 Django 存款金额
【发布时间】:2020-02-13 20:44:59
【问题描述】:

模型.py

类客户(models.Model):

user = models.ForeignKey(User, on_delete=models.CASCADE)

contact = models.BigIntegerField(unique=True)

amount = models.BigIntegerField()

type = models.CharField(max_length=1)`

Form.py

class Deposit_Form(forms.Form):

amount = forms.IntegerField(min_value=200, label="Enter amount u want to deposit")

查看.py

类登录(模板视图):

template_name = 'login.html'

def get(self, request, *args, **kwargs):

    Form = Login()

    return render(request, self.template_name, {'form': Form})

def post(self, request):

    username = self.request.POST.get('username').strip()

    password = self.request.POST.get('password').strip()

    if username is None or password is None:

        return HttpResponse({'Doesnt exist'}, status=HTTP_400_BAD_REQUEST)

    user = authenticate(username=username, password=password)

    if not user:

        return HttpResponse({'Invalid candidate '}, status=HTTP_404_NOT_FOUND)

    return redirect('customer_menu')

定义客户菜单(请求):

if "user_id" in request.session:

    return render(request, 'customer_menu.html')

类存款(TemplateView):

template_name = 'deposit.html'

def get(self, request, *args, **kwargs):

    Form = Deposit_Form()

    return render(request, self.template_name, {'form': Form})

@staticmethod

def post(request):

    if "user_id" in request.session:

        data = request.POST.get

        try:

            deposit_amount=data('deposit_amount')

            customer = CustomerModel(

                amount = deposit_amount+amount
            )
            customer.save()

            return HttpResponse('action performed successfully', 500)

        except Exception as e:

            return HttpResponse("failed : {}".format(e), 200)

现在我无法理解如何存款金额,它在存款类发布函数中显示错误 amount = deposit_amount + amount

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    如果我正确理解您的问题,您希望增加客户模型上的金额字段。但首先你必须找到你想要更新的对象。而且你不能直接CustomerModel(amount=deposit_amount+amount)。 您可以为此使用F() 函数。例如:CustomerModel.filter(pk=id).update(amount=F('amount')+deposite_amount)

    关于F()函数的详细信息,你可以找到here的详细信息

    编辑: 作为另一种方式,您可以使用 get() 方法找到您的 CustomerModel 对象并增加您的金额字段。之后,您可以保存您的对象。 像这样:

    customer = CustomerModel.objects.get(pk=id) #you can change query field
    customer.amount = customer.amount + data('deposite_amount')
    customer.save()
    

    【讨论】:

    • 什么是 CustomerModel.filter(pk=id)?是user_id
    • 不,我只提供一个样本。您必须决定要更新哪个对象,并在此基础上找到该对象。您可以使用 user_id 字段,但是您的模型不会与用户一对一连接。因此,您可能会错误地访问另一个 CustomerModel。因此,您必须编写自己的过滤器逻辑。
    • 显示此错误 'DeferredAttribute' 对象没有属性 'update'
    • def post(request): if "user_id" in request.session: data = request.POST.get try: deposit_amount = data('deposit_amount') customer = CustomerModel.amount.update(amount= F('amount') + deposit_amount) customer.save() return HttpResponse('action执行成功', 500) except Exception as e: return HttpResponse("failed : {}".format(e), 200)
    • 好吧,您的CustomerModel.amount.update(amount=F('amount') + deposit_amount) 代码错误。因为您必须决定要更新哪个数据库记录?您必须先过滤,然后才能更新记录。像那样CustomerModel.objects.filter(you must fill here).update(amount=F('amount') + deposit_amount)
    【解决方案2】:

    什么是错误?

    确保该字段可以为空

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    
    contact = models.BigIntegerField(unique=True)
    
    amount = models.BigIntegerField()
    
    type = models.CharField(max_length=1)`
    

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2013-03-10
      • 2015-10-11
      • 1970-01-01
      • 2012-06-21
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多