无法分配必须是用户实例django

无法分配必须是用户实例django,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,我已经为表单提交创建了一个工作正常的模型,我想使用文档模型中的表单id作为外键,基于相应的表单创建一个新的文档提交模型 我的文档模型如下所示: class PHDDocument(models.Model): user = models.ForeignKey(HigherStudiesForms, on_delete=models.PROTECT, null=True, blank=True) admission_letter = models.FileField(blank=F

我已经为表单提交创建了一个工作正常的模型,我想使用文档模型中的表单id作为外键,基于相应的表单创建一个新的文档提交模型

我的文档模型如下所示:

class PHDDocument(models.Model):
    user = models.ForeignKey(HigherStudiesForms, on_delete=models.PROTECT, null=True, blank=True)
    admission_letter = models.FileField(blank=False, null=False)
    award_letter = models.FileField(blank=False, null=False)
    attested_degree = models.FileField(blank=False, null=False)
    cv = models.FileField(blank=False, null=False)
    travel_agent = models.FileField(blank=False, null=False)
    surety_bond = models.FileField(blank=False, null=False)
    attested_surety_bond = models.FileField(blank=False, null=False)
    guarantee_cnic = models.FileField(blank=False, null=False)
    study_leave = models.FileField(blank=False, null=False)
    objection_certificate = models.FileField(blank=False, null=False)
    hod_form = models.FileField(blank=False, null=False)
    rector_form = models.FileField(blank=False, null=False)

    def __str__(self):
        return str(self.admission_letter)
以下模型的查看方法如下所示:

class PHDFileView(viewsets.ModelViewSet):
    permission_classes = (IsAuthenticated,)
    lookup_field = 'pk'
    lookup_url_kwarg = 'form_id'
    serializer_class = PHDDocumentSerializer

    def get_queryset(self):
        queryset = PHDDocument.objects.all()
        return queryset

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
序列化程序方法如下所示:

class PHDDocumentSerializer(serializers.ModelSerializer):
class Meta:
    model = PHDDocument
    fields = ('id', 'admission_letter', 'award_letter', 'attested_degree', 'cv', 'travel_agent', 'surety_bond',
              'attested_surety_bond', 'guarantee_cnic', 'study_leave', 'objection_certificate', 'hod_form',
              'rector_form')
当我在通过Angular Django提交表单后提交文档时,出现以下错误“ValueError:无法分配”用户:ahssu:“PHDDocument.User”必须是“HigherStudiesForms”实例。

,如错误所述:

ValueError:无法分配“User:ahssu”:“PHDDocument.User”必须是“HigherStudiesForms”实例

您尝试为“用户”字段分配的实例与“用户”字段接受的实例不同

在您的模型中:

user = models.ForeignKey(HigherStudiesForms, on_delete=models.PROTECT, null=True, blank=True)
请求时,用户字段指向
HigherStudiesForms
。用户
将从
用户
模型返回一个实例

您可以更改默认用户模型,但您提供的错误并非如此

将用户字段中的
HigherStudiesForms
更改为
user
,或者在序列化程序中传递一个
HigherStudiesForms
实例

from django.contrib.auth.models import User

class PHDDocument(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT, null=True, blank=True)
    ...
正如错误所说:

ValueError:无法分配“User:ahssu”:“PHDDocument.User”必须是“HigherStudiesForms”实例

您尝试为“用户”字段分配的实例与“用户”字段接受的实例不同

在您的模型中:

user = models.ForeignKey(HigherStudiesForms, on_delete=models.PROTECT, null=True, blank=True)
请求时,用户字段指向
HigherStudiesForms
。用户
将从
用户
模型返回一个实例

您可以更改默认用户模型,但您提供的错误并非如此

将用户字段中的
HigherStudiesForms
更改为
user
,或者在序列化程序中传递一个
HigherStudiesForms
实例

from django.contrib.auth.models import User

class PHDDocument(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT, null=True, blank=True)
    ...

在您的
PHDDocument
模型中,
user
字段被引用到
HigherStudiesForms
类。但是,在
PHDFileView
perform\u create()
方法中,您分配了一个不同的值,这在
PHDDocument
模型中是不允许的,字段
user
引用了
HigherStudiesForms
类。但是,在
PHDFileView
perform_create()
方法中,您分配了一个不同的值,答案中没有解释这一点。将foreignkey for user字段更改为
user
model或更改
serializer.save(user=self.request.user)
并传递一个
HigherStudiesForms
实例,而不是
self.request.user
这是一个
user
模型实例。您可以帮助我如何创建“HigherStudiesForms”模型实例代替“self.request.user”,您可以创建一个新实例
HigherStudiesForms.objects.create()
,也可以使用
.get()
获得一个实例。在做这件事之前,你应该阅读django文档。我在回答中解释道。将foreignkey for user字段更改为
user
model或更改
serializer.save(user=self.request.user)
并传递一个
HigherStudiesForms
实例,而不是
self.request.user
这是一个
user
模型实例。您可以帮助我如何创建“HigherStudiesForms”模型实例代替“self.request.user”,您可以创建一个新实例
HigherStudiesForms.objects.create()
,也可以使用
.get()
获得一个实例。在做这件事之前,你应该阅读django文档。