Api 值错误:";医生院.医生id“;必须是一个";DoctorUserProfile";实例

Api 值错误:";医生院.医生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

我有一个由Django用户模型扩展的DoctorUserProfile。 我有另一个模型,DoctorHospital,它扩展了DoctorUserProfile来存储与特定医生相关的数据

我已经使用DRF创建了API,并且创建了一个API,它将数据添加到DoctorHospital模型,并将DoctorUserProfile链接到当前用户的。 我面临的错误是说应该这样做 models.py

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。但是谢谢你的建议,重要的是医生的建议。