【发布时间】:2021-12-03 15:44:21
【问题描述】:
我遇到错误
django.db.utils.IntegrityError: UNIQUE 约束失败:app_recovery.id
同时保存我的恢复模型。
我在 PostMen 上发送了带有数据的 POST 请求
{'party': 1, 'party_order': '2', 'sale_officer': 1, 'payment_method': '清算','银行':'','金额':'500000','描述':'集团 恢复'}
它提出了 UNIQUE 约束但保存了数据。
我的模特:
class Recovery(models.Model):
date = models.DateField(default=timezone.now, blank=True)
party = models.ForeignKey(Party,on_delete=models.CASCADE)
status = models.CharField(max_length=50, choices=[('Pending', 'Pending'), ('Approved','Approved')], default='Pending')
party_order = models.ForeignKey(PartyOrder,on_delete=models.CASCADE,null=True,blank=True)
sale_officer = models.ForeignKey(SalesOfficer,on_delete=models.CASCADE)
payment_method = models.CharField(max_length=20,choices=(('Cash','Cash'),('Bank','Bank'),('Clearing','Clearing')))
bank = models.ForeignKey(Bank,on_delete=models.CASCADE,null=True,blank=True)
amount = models.FloatField()
description = models.CharField(max_length=50)
pl = models.ForeignKey(PartyLedger,on_delete=models.CASCADE,null=True,blank=True)
bl = models.ForeignKey(BankLedger,on_delete=models.CASCADE,null=True,blank=True)
cl = models.ForeignKey(CashLedger,on_delete=models.CASCADE,null=True,blank=True)
cll = models.ForeignKey(ClearingLedger,on_delete=models.CASCADE,null=True,blank=True)
def _str_(self):
return str(self.id) + ':' + self.sale_officer.name
def save(self, *args, **kwargs):
if self.id == None:
super(Recovery, self).save(*args, **kwargs)
if self.party_order:
order = PartyOrder.objects.get(id=self.party_order.id)
order.pandding_amount -= self.amount
order.save()
else:
if self.status == 'Approved':
if self.party_order:
pl = PartyLedger(party=self.party,sales_officer=self.sale_officer,
freight = self.party_order.freight,transaction_type='Credit',
description=self.description,
total_amount=self.amount)
pl.save()
else:
pl = PartyLedger(party=self.party,sales_officer=self.sale_officer,
transaction_type='Credit',
description=self.description,
total_amount=self.amount)
pl.save()
self.pl = pl
if self.payment_method == 'Bank':
bl = BankLedger(bank=self.bank,transaction_type='Debit',
description=self.description,
total_amount=(self.amount))
bl.save()
self.bl = bl
elif self.payment_method == 'Cash':
cl = CashLedger(transaction_type='Debit',
description=self.description,
total_amount=(self.amount))
cl.save()
self.cl = cl
elif self.payment_method == 'Clearing':
ccl = ClearingLedger(transaction_type='Debit',
description=self.description,
total_amount=(self.amount))
ccl.save()
self.cll = ccl
super(Recovery, self).save(*args, **kwargs)
序列化器:
class RecoverySerializer(serializers.ModelSerializer):
class Meta:
model = m.Recovery
fields = '_all_'
def to_representation(self, instance):
response = super().to_representation(instance)
response['bank'] = BankSerializer(instance.bank).data
response['party'] = PartySerializer(instance.party).data
response['party_order'] = PartyOrderSerializer(instance.party_order).data
response['sale_officer'] = SalesOfficerSerializer(instance.sale_officer).data
return response
查看:
class RecoveryViewSet(viewsets.ViewSet):
def create(self, request):
# if request.user.is_superuser or p.SalesOfficer(request):
if request:
# try:
serializer = s.RecoverySerializer(
data=request.data, context={"request": request})
print(request.data)
serializer.is_valid(raise_exception=True)
# print(serializer.errors)
serializer.save()
print(serializer.errors)
dict_response = {"error": False,
"message": "Data Save Successfully"}
# except ValueError as err:
# dict_response = {"error": True, "message": err}
# except:
# dict_response = {"error": True,
# "message": "Error During Saving Data"}
return JsonResponse(dict_response)
【问题讨论】:
标签: python django api django-rest-framework