【发布时间】:2020-11-29 19:33:32
【问题描述】:
我已经编写了一个模型并将 uuid 作为我的主要 id。当我使用 POST 时,它给了我错误 - “具有此 uuid 的用户已经存在。” 仅当我将用户的模型主键从“id”更改为“uuid”时,此错误才开始显示。 p>
这些是相关模型 -
用户模型:
class User(models.Model):
uuid = models.CharField(default=uuid.uuid4, max_length=50, primary_key=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
email_id = models.EmailField(max_length=100, default="")
约会模式:
class Appointment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
zorg = models.ForeignKey(Zorg, on_delete=models.CASCADE, null=True)
branch = models.ForeignKey(Zorg_Branche, on_delete=models.CASCADE, null=True, related_name='branch')
timestamp = models.DateTimeField(auto_now_add=True, blank=True)
status = models.ForeignKey(Appointment_Status, on_delete=models.CASCADE, null=True)
totaltime = models.PositiveIntegerField(default=0)
total_price = models.DecimalField(decimal_places=2, max_digits=10, default=0)
约会细节模型:
class AppointmentDetail(models.Model):
appointment = models.ForeignKey(Appointment, on_delete=models.CASCADE,null=True, related_name='appointment')
service = models.ForeignKey(Service, on_delete=models.CASCADE,null=True, related_name='service')
相关的序列化器 -
UserAppointmentSerializer:
class UserAppointmentSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'uuid',
'first_name',
'last_name',
'email_id',
'mobile_number',
'birthdate',
'photo_url',
'gender',
]
class ZorgBranchAppointmentSerializer(serializers.ModelSerializer):
class Meta:
model = Zorg_Branche
exclude = ['id', 'zorg']
class ServiceAppointmentSerializer(serializers.ModelSerializer):
class Meta:
model = Service
exclude = ['id', 'category']
class ZorgAppointmentSerializer(serializers.ModelSerializer):
class Meta:
model = Zorg
fields = [
'id',
'name',
'salon_email_id',
'website'
]
class AppointmentDetailSerializer(serializers.ModelSerializer):
service = ServiceAppointmentSerializer()
class Meta:
model = AppointmentDetail
exclude = ['id', 'appointment']
class AppointmentStatusSerilizer(serializers.ModelSerializer):
class Meta:
model = Appointment_Status
fields = ['status']
class AppointmentSerializer(serializers.ModelSerializer):
appointment = AppointmentDetailSerializer(many=True)
status = AppointmentStatusSerilizer()
user = UserAppointmentSerializer()
zorg = ZorgAppointmentSerializer()
branch = ZorgBranchAppointmentSerializer()
class Meta:
model = Appointment
fields = ['id', 'status',
'appointment',
'user',
'zorg',
'branch',
'timestamp',
'totaltime',
'total_price']
def create(self, validated_data):
user = validated_data.pop('user')
zorg = validated_data.pop('zorg')
status = validated_data.pop('status')
branch = validated_data.pop('branch')
user_instance = User.objects.get(**user)
zorg_instance = Zorg.objects.get(**zorg)
status_instance = Appointment_Status.objects.get(**status)
branch_instance = Zorg_Branche.objects.get(**branch)
appointment_services = validated_data.pop('appointment')
appointment = Appointment.objects.create(user = user_instance, zorg = zorg_instance, status = status_instance, branch = branch_instance, **validated_data)
for services in appointment_services:
service = services.pop('service')
service_instance = Service.objects.get(**service)
AppointmentDetail.objects.create(appointment=appointment, service=service_instance)
return appointment
【问题讨论】:
-
我认为在尝试创建新用户时会发生这种情况。当您尝试在
model中复制唯一字段时会出现您遇到的错误,在这种情况下是您的primay-key。首先,如果您必须使用自定义主键,请使用int和auto-increments,这样您就不必担心重复和跟踪使用的值。 -
我在使用 JSON POST 进行预约时收到此错误。当我使用管理面板创建时,它工作正常,但是当我使用 POST 方法进行预约并传递用户 uuid 时,它就会发生。当我从序列化程序中删除 uuid 字段时,它工作正常。
标签: python django api django-rest-framework