Python 取款系统在OnetoOneField得到了完善。第一次一切正常,然后出错

Python 取款系统在OnetoOneField得到了完善。第一次一切正常,然后出错,python,django,constraints,Python,Django,Constraints,my model.py中的三个表-账户,提取,税务详情。我在账户表中有一个存档的总金额(total\u amnt\u WoP)。场景是,当我尝试提取金额时,它将减少总金额,并从中减少一些税款(提取金额的10%),并且每次都将保存在taxDetails表中。我试图将总税额存储在表中 在我的例子中,它第一次很好地工作(将税款保存在taxDetails表中)。但当我第二次尝试退出时,它得到: IntegrityError.(IntegrityError at /account_balance/with

my model.py中的三个表-
账户
提取
税务详情
。我在账户表中有一个存档的总金额(
total\u amnt\u WoP
)。场景是,当我尝试提取金额时,它将减少总金额,并从中减少一些税款(提取金额的10%),并且每次都将保存在
taxDetails
表中。我试图将总税额存储在表中

在我的例子中,它第一次很好地工作(将税款保存在
taxDetails
表中)。但当我第二次尝试退出时,它得到:

IntegrityError.(IntegrityError at /account_balance/withdraw/, UNIQUE constraint failed: account_balance_taxdetails.user_id)
当我从draw表(
draw.objects.all().delete()
)或taxDetails(
taxDetails.objects.all().delete()
)表中删除所有对象时,它工作正常,但只是第一次。那么解决办法是什么呢

这是我的models.py文件:

类帐户(models.Model):
purchase\u amnt=models.FloatField()
ref_amnt=models.FloatField()
prantic_amnt=models.FloatField()
middle\u amnt=models.FloatField()
ehp_amnt=models.FloatField()
esp_amnt=models.FloatField()
激励措施=模型。浮动区()
user=models.ForeignKey(user,blank=True,null=True,on_delete=models.CASCADE)
total\u amnt\u WoP=models.FloatField()
类撤回(models.Model):
account=models.ForeignKey(account,on_delete=models.CASCADE)
user=models.OneToOneField(user,blank=True,null=True,on_delete=models.CASCADE)
prev_amnt=models.FloatField(空白=True,空=True,默认=0)
当前\u amnt=models.FloatField(空白=True,空=True,默认=0)
adjast_amnt=models.FloatField(blank=True,null=True,default=0)
requision\u amnt=models.FloatField(空白=True,空=True,默认=0)
总计\u兑现\u金额=models.FloatField(默认值=0)
事务id=models.CharField(最大长度=100,空白=True,空=True)
状态=models.BooleanField(默认值=False)
#购买百分比
prev_pur_tot=models.FloatField(空白=True,空=True,默认=0)
兑现金额=models.FloatField(默认值=0)
当前\u pur\u tot=models.FloatField(blank=True,null=True,default=0)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
修改的_at=models.DateTimeField(auto_now=True)
类别详细信息(models.Model):
withdra=models.ForeignKey(收回,on_delete=models.CASCADE,null=True)
user=models.OneToOneField(user,null=True,on_delete=models.CASCADE)
tax_prev=models.FloatField(默认值=0)
tax\u curr=models.FloatField(默认值=0)
税款金额合计=模型。浮动字段(默认值=0)
tax\u id=models.CharField(最大长度=100)
tax\u pay\u date=models.datetime字段(auto\u now=True)
tax\u info\u law=models.CharField(max\u length=155,blank=True,null=True)
tax\u给定区域=models.CharField(最大长度=100,空白=True,空=True)
tax_medium=models.CharField(max_length=100,blank=True,null=True)
tax_description=models.CharField(最大长度=100,空白=True,空=True)
views.py文件:

来自django.contrib导入消息的

从.模型导入帐户、取款、税务、税务详细信息
导入日期时间
从django.utils导入时区
from.forms导入表单
从django.contrib.auth.models导入用户
#计算总金额
def账户余额计算(请求):
acc=Account.objects.all()
对于acc中的i:
obj=Account.objects.get(id=i.id)
pur=i.采购
ref=i.ref\u amnt
prantic=i.prantic\u amnt
middle=i.middle\u amnt
ehp=i.ehp\u amnt
esp=i.esp\u amnt
激励,激励
总金额=(激励+esp+ehp+中间+实践+参考+pur)
对象总数=总数
obj.save()
#从account表中获取附加值以提取表
obj2=draw()
obj2.account=obj
obj2.user=i.user
obj2.prev_amnt=总amnts
对象J2.当前值=总值
obj2.prev_pur_tot=pur
obj2.save()
返回呈现(请求“account\u balance/show.html”)
def视图(请求):
tt=Account.objects.filter().values\u list('total\u amnt\u WoP'))
ttt=tt[0]
如果request.method==“POST”:
表单=撤销表单(request.POST)
如果form.is_有效():
Requisition\u amnt=表格.已清理的\u数据['Requisition\u amnt']#提取金额
打印('--------------要求撤销--------------------'))
打印(要求)
obj=draw.objects.filter(user\u id=request.user.id).first()
#按10%计算的购买百分比
采购百分比=(对象上一次采购总额/对象上一次采购金额)*100
打印(“10%的采购百分比检查”)
打印(购买百分比)
如果采购百分比>=10,且目标上一个金额>=1:#检查提取条件
事务处理_id='1kfTxx56jlj'#来自管理员的静态输入
obj.transaction\u id=事务\u id
对象要求=要求
临时金额=对象总金额+兑现金额+需求金额
目标总兑现金额=临时金额
对象当前金额=对象上一个金额-临时金额
#减税10%
税率=(10/100)*要求
税后余额=需求量-税后百分比
打印(--------------税后余额----------------:)
打印(税后余额)
abc=User.objects.get(id=request.User.id)
obj3=税务详情()
obj3.user=abc
obj3.withdra=obj
obj3.税前=税百分比
obj3.税币=税百分比
obj3.税金额总额=obj3.税金额总额+税百分比
obj3.save()#这一行在每次。。。
x=obj.prev_pu
from .models import Account, withdraw

class withdrawForm(forms.ModelForm):
    class Meta:
        model = withdraw
        fields = ['requisation_amnt']

{% extends 'basic.html' %}
{% load crispy_forms_tags %}
{% block body %}

<div class="card mt-5">
    <div class="card-body">
        <div class="col-md-6 offset-md-3">
            <form action="" method="post">
                {% csrf_token %}
                {{form|crispy}}
                
                <button type="submit" class="btn btn-primary">withdraw</button>
            </form>
        </div>

    </div>
</div>

{% endblock body %}
from .views import accountBalanceCalculation, withdrawView

app_name='account_balance'

urlpatterns = [
    path('accntbal/', accountBalanceCalculation, name="accntbal"),
    path('withdraw/', withdrawView, name="withdraw"),
]

# http://127.0.0.1:8000/account_balance/accntbal/
# http://127.0.0.1:8000/account_balance/withdraw/
try:
  if User.objects.get(id=request.user.id).exists():
     update data...
  else:
     create new record..
except Exception as e:
  print('Error : ',e)