django - 使用 where 查询的 Django REST 框架部分更新
问题描述
我只想更新 id_payment = 1 的表的两个字段。怎么做?它向我显示了下面的错误。/receivePendingPayment/ 处的 IntegrityError(1048,“列 'bank_id' 不能为空”)
#View
@permission_classes([IsAuthenticated])
@api_view(['PATCH'])
def receivePendingPayment(request):
id_payment = request.data['id_payment']
data = {'accountant_received_by': request.user.id, 'accounts_status': 'Received'}
BankPaymentHistory.objects.filter(id=id_payment)
serializer = BankPaymentUpdateSerializer(data=data, partial=True, many=False)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#Serializer
class BankPaymentUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = BankPaymentHistory
fields = ('accounts_status','accountant_received_by')
#Model
class BankPaymentHistory(models.Model):
activation_enum = (('Active', 'Active'), ('Deactive', 'Deactive'))
accounts_status_enum = (('Pending', 'Pending'), ('Received', 'Received'))
bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
file = models.ForeignKey(File, on_delete=models.CASCADE)
salesperson = models.ForeignKey(SalesPerson, on_delete=models.CASCADE)
paymentmode = models.ForeignKey(PaymentModes, on_delete=models.CASCADE)
amount = models.PositiveIntegerField()
chequeno = models.CharField(max_length=50, unique=True)
chequedate = models.DateField()
paymentdate = models.DateField()
remark = models.TextField(blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
accountant_received_by = models.ForeignKey(User, related_name='%(class)s_accountant_received_by', on_delete=models.CASCADE, null = True)
accountant_received_date = models.DateTimeField(default=datetime.now)
create_date = models.DateTimeField(default=datetime.now)
activation_status = models.CharField(max_length=20, choices=activation_enum, default='Active')
accounts_status = models.CharField(max_length=20, choices=accounts_status_enum, default='Pending')
解决方案
将一个实例传递给序列化程序,这样它就可以知道它应该进行更新。
instance = BankPaymentHistory.objects.filter(id=id_payment).first()
serializer = BankPaymentUpdateSerializer(instance=instance, data=data, partial=True, many=False)
推荐阅读
- python - 如何更改条形图上的“xticklabels”?
- java - java.lang.IndexOutOfBoundsException :当我尝试从 recyclerview 列表中删除项目时
- android - 启动库模块活动
- javascript - VueJs:显示每个切片的饼图数据值
- youtube-data-api - YouTube v3 API PHP - 将播放列表服务器添加到服务器
- time-complexity - 查找重写 DFS 的复杂性
- machine-learning - pytorch - loss.backward() 和 optimizer.step() 之间的连接
- android - Creating a txt file and viewing it in the File manger
- java - 覆盖 `ParamConvertorProvider` 的通用抽象方法
- php - 如何修复 file_get_html 的超时?