не может назначить должен быть пользовательский экземпляр Django - PullRequest
1 голос
/ 20 марта 2019

Я создал модель для отправки формы, которая работает нормально, я хочу создать новую модель для подачи документов на основе соответствующей формы, используя идентификатор формы как Внешний ключ в модели документов

Моя модель документов выглядит следующим образом:

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: Невозможно назначить" User: ahssu ":" PHDDocument.user "должен быть" HigherStudiesForms ""instance."

1 Ответ

0 голосов
/ 21 марта 2019

Как говорит ошибка:

ValueError: Невозможно назначить «User: 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)
    ...
...