Невозможно присвоить "'somedata'": "otherdatal" должен быть экземпляром "".

возможно ли вставить значение сессии во внешний ключ? у меня есть 2 модели

class candidate(models.Model):
    fname=models.CharField("First name ",max_length=20,default="")
    lname=models.CharField("Last name ",max_length=20,default="")
    email=models.EmailField("Email ",max_length=254,primary_key=True)
    password=models.CharField("Password ",max_length=100,default="")
    
    def __str__(self):
        return self.email #self.fname+" " +self.lname

здесь я принимаю email из вышеуказанной модели в качестве сессии и пытаюсь поместить это значение сессии в поле внешнего ключа следующей модели

class canDetails(models.Model):
    candEmail=models.ForeignKey(candidate,on_delete=models.CASCADE)
    location=models.CharField("location ",max_length=30)
    role=models.CharField("role ",max_length=20)
    cv=models.FileField(upload_to="media/canDetails/")

    def __str__(self):
        return self.candEmail

но здесь я получаю ошибку типа Cannot assign "'cb@gmail.com'": "canDetails.candEmail" must be a "candidate" instance.

я пытаюсь получить все детали из модели кандидата и модели candDetails одновременно, поэтому я использую pf и fk здесь, так что это правильный путь, которым я следую...? Как я могу справиться с этим? Любые предложения, пожалуйста?

Модель canDetails должна знать, к какой candidate она принадлежит, поэтому поле Foreingkey должно быть экземпляром candidate (в базе данных хранится значение PK). Я настоятельно рекомендую, как и в документации Django, называть поле candidate и имена моделей заглавными буквами, для большей ясности.

class Candidate(models.Model):
    ...

class CanDetails(models.Model):
    candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
    ...

Если у вас есть только email, то вы можете использовать его для поиска того, к какому Candidate он принадлежит, получить этот экземпляр и присвоить его CanDetails. Например:

try:
    the_candidate = Candidate.objects.get(email='cb@gmail.com')
except (Candidate.DoesNotExist, Candidate.MultipleObjectsReturned):
    # raise error or exit
    return

det = CanDetails()
det.candidate = the_candidate
...
det.save()
Вернуться на верх