【问题标题】:cannot assign must be a user instance djangocannot assign 必须是用户实例 django
【发布时间】:2019-03-20 20:47:08
【问题描述】:

我创建了一个工作正常的表单提交模型,我想创建一个基于相应表单的新模型提交文档,使用表单 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”实例。”

【问题讨论】:

  • 在您的 PHDDocument 模型中,user 字段被引用到 HigherStudiesForms 类。但是,在 PHDFileViewperform_create() 方法中,您分配了不同的值,这是不允许的

标签: django django-rest-framework django-views


【解决方案1】:

正如错误所说:

ValueError:无法分配“用户:ahssu”:“PHDDocument.user”必须是“HigherStudiesForms”实例。

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

在您的模型中:

user = models.ForeignKey(HigherStudiesForms, on_delete=models.PROTECT, null=True, blank=True)

用户字段指向HigherStudiesForms,而request.user 将返回来自User 模型的实例。

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

要么将用户字段中的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)
    ...

【讨论】:

  • 我在答案中解释了。将用户字段的外键更改为 User 模型或更改 serializer.save(user=self.request.user) 并传递 HigherStudiesForms 实例而不是 self.request.user 这是 User 模型实例
  • 你能帮我看看如何创建“HigherStudiesForms”模型实例来代​​替“self.request.user”
  • 您可以创建一个新的HigherStudiesForms.objects.create(),也可以使用.get() 获取一个。在真正执行此操作之前,您应该阅读 django 文档。
猜你喜欢
  • 1970-01-01
  • 2017-03-19
  • 2019-03-21
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多