【发布时间】:2020-10-21 14:53:56
【问题描述】:
首先我更新我的模型实例,然后我尝试插入新数据但显示
"IntegrityError('重复键值违反了唯一约束"RFIDActivation_ActivationId_key"\nDETAIL: Key ("ActivationId")=(6de9ed9a) 已经存在。\n',)"
模型.py
class RFIDActivation(models.Model):
RFIDActivationId = models.AutoField(primary_key=True, db_column='RFIDActivationId')
Device = models.ForeignKey(Device, on_delete=models.CASCADE, db_column='DeviceId')
Employee = models.ForeignKey(Employee, on_delete=models.CASCADE, db_column='EmployeeId')
ActivationId = models.CharField(max_length=10, unique=True, default=uuid4().hex[:8])
ActivationStatus = models.CharField(max_length=1)default=None)
class Meta:
db_table = "RFIDActivation"
我的序列化器.py
class RFIDActivationSerializer(serializers.ModelSerializer):
class Meta:
model = RFIDActivation
fields = '__all__'
view.py
@api_view(["POST"])
@permission_classes([IsAuthenticated])
def rfid_activation_initial(request):
RFIDActivation.objects.filter(Employee=request.POST.get("Employee")).update(
ActivationStatus='2',
ActivationMessage='Abort'
)
rfid_activation = {
'Employee': request.POST.get("Employee"),
'Device': request.POST.get("Device"),
'ActivationStatus': "0",
'ActivationMessage': "RFID Activation Initiated"
}
rfid_serializer = RFIDActivationSerializer(data=rfid_activation)
if rfid_serializer.is_valid():
rfid_serializer.save()
但是 rfid_serializer.save() 显示异常exception
Previous ActivationId 用于保存新数据。 ActivationId 是唯一的并且是自动生成的。我该如何解决这个问题。错误显示在更新查询后尝试插入
view.py 用于仅插入工作正常的代码。
@api_view(["POST"])
@permission_classes([IsAuthenticated])
def rfid_data_add(request):
rfid_activation = {
'Employee': request.POST.get("Employee"),
'Device': request.POST.get("Device"),
'ActivationStatus': "0",
'ActivationMessage': "RFID Activation Initiated"
}
rfid_serializer = RFIDActivationSerializer(data=rfid_activation)
if rfid_serializer.is_valid():
rfid_serializer.save()
【问题讨论】:
-
在您的主键中指定
read_only=True,RFIDActivationId = models.AutoField(primary_key=True, db_column='RFIDActivationId', read_only=True) -
@minglyu ,同时添加 read_only=True ,显示错误 TypeError: __init__() got an unexpected keyword argument 'read_only'
-
@minglyu 在这里我正在尝试更新现有详细信息,然后插入新数据。在这种情况下,显示重复键值的唯一键 ActivationId(非主键)违反了唯一约束错误。但插入没有更新查询工作正常
-
您还遇到问题吗?
标签: django django-models django-rest-framework django-serializer