Api 值错误:";医生院.医生id“;必须是一个";DoctorUserProfile";实例
我有一个由Django用户模型扩展的DoctorUserProfile。 我有另一个模型,DoctorHospital,它扩展了DoctorUserProfile来存储与特定医生相关的数据 我已经使用DRF创建了API,并且创建了一个API,它将数据添加到DoctorHospital模型,并将DoctorUserProfile链接到当前用户的。 我面临的错误是说应该这样做 models.pyApi 值错误:";医生院.医生id“;必须是一个";DoctorUserProfile";实例,api,foreign-keys,django-rest-framework,Api,Foreign Keys,Django Rest Framework,我有一个由Django用户模型扩展的DoctorUserProfile。 我有另一个模型,DoctorHospital,它扩展了DoctorUserProfile来存储与特定医生相关的数据 我已经使用DRF创建了API,并且创建了一个API,它将数据添加到DoctorHospital模型,并将DoctorUserProfile链接到当前用户的。 我面临的错误是说应该这样做 models.py class DoctorUserProfile(models.Model): user = mo
class DoctorUserProfile(models.Model):
user = models.ForeignKey(User, null=True, blank=True)
name = models.CharField(max_length=50)
age = models.CharField(max_length=10)
gender = models.CharField(max_length=10)
spec = models.CharField(max_length=50, choices=DOCTOR_TYPE, null=True, blank=True, db_index=True)
education = models.CharField(max_length=50, choices=DOCTOR_EDU, default=PHY, db_index=True)
profile_image = VersatileImageField('doctor_images', upload_to="doctor_images/", null=True, blank=True)
experience = models.CharField(max_length=100, null=True, blank=True)
speciality = models.ForeignKey(Specialities, on_delete=models.CASCADE, null=True, blank=True)
class Meta:
app_label = 'pwave'
def __str__(self):
return '%s' % (self.name)
class DoctorPerHospital(models.Model):
doc_id = models.ForeignKey(DoctorUserProfile, null=True, blank=True)
hospital = models.ForeignKey(HospitalUserProfile, on_delete=models.CASCADE, null=True, blank=True)
appointment_cost = models.DecimalField(max_digits=8, decimal_places=2, default=0)
discount = models.DecimalField(max_digits=8, decimal_places=2, default=0)
discounted_cost = models.DecimalField(max_digits=8, decimal_places=2, default=0)
class Meta:
app_label = 'pwave'
def __str__(self):
return '%s' %(self.doc_id)
序列化程序.py
class DoctorInfoSerializer(serializers.ModelSerializer):
class Meta:
model = DoctorUserProfile
fields = ('id','user','name','age','gender','spec','education',
'profile_image','experience','speciality')
read_only_fields = ('user',)
class DoctorPerHospitalSerializer(serializers.ModelSerializer):
class Meta:
model = DoctorPerHospital
fields = ('id','doc_id','hospital','appointment_cost','discount','discounted_cost')
read_only_fields = ('doc_id',)
views.py
class DoctorPerHospitalViewSet(viewsets.ModelViewSet):
queryset = DoctorPerHospital.objects.all()
serializer_class = DoctorPerHospitalSerializer
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
profile = serializer.save()
current_user = DoctorUserProfile.objects.get(user=request.user)
print(current_user.id)
profile.doc_id = current_user.id
profile.save()
return Response(serializer.validated_data)
return Response({
'status': 'Bad request',
'message': 'Account could not be created with provided data'
}, status=status.HTTP_400_BAD_REQUEST)
错误声明如下:
您当前的模型和序列化程序存在几个问题 首先,
医生id
在医生医院
模型中被错误命名。它应该是doc
,因为Django ORM将使用模型实例。请注意,如果它的名称为doc
,那么您将有一个额外的字段,该字段将表示存储在数据库中的密钥,即doc\u id
——即\u id
接下来,您应该将DoctorUserProfile
模型的用户ForeignKey
更改为OneToOneField
,这将确保您的DoctorUserProfile
和您的用户之间存在一对一的关系
最后是关于序列化程序的创建doc
是DoctorUserProfile
实例,而请求是user
实例。您应该使用反向的DoctorUserProfile
的用户从user
实例获取配置文件 我解决了错误,在我的vies.py中调用current_user.id instaed of current_user。但是谢谢你的建议,重要的是医生的建议。