保存具有ForeignKey的對象時,出現常見錯誤: '無法指定(myObject)「:」(我的ForeignKey字段)「必須是實例。保存ForeignKey作爲實例,但它仍然抱怨
這個問題是清楚的回答:
Django - Foreign Key must be an instance
Django ForeignKey Instance vs Raw ID
但解決方案不是爲我工作。
models.py
class User(models.Model):
email = models.EmailField(max_length=100, unique=True)
password = models.CharField(validators=[MinLengthValidator(8)],max_length=60)
is_teacher = models.BooleanField(default=0)
class Question(models.Model):
question_text = models.CharField(max_length=5000)
pub_date = models.DateTimeField('date asked')
answered = models.BooleanField(default=False)
asker = models.IntegerField(default=0)
def __str__(self):
return self.question_text
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now;
def asked_by(self):
return self.asker
class Answer(models.Model):
to_question = ForeignKey(Question, null=False)
pub_date = models.DateTimeField('date answered')
answer_text = models.CharField(max_length=10000)
answered_by = ForeignKey(User, null=False)
def __str__(self):
return self.answer_text
views.py
@staff_member_required()
def answerQuestion(request):
if request.method == 'POST':
form = QuestionAnswerForm(request.POST,label_suffix='',error_class=DivErrorList)
if form.is_valid():
answer_text = request.POST['answer_text']
question_id = request.POST['question_id']
now = timezone.now()
try:
to_question = Question.objects.get(pk=question_id)
answered_by= User.objects.get(pk=request.user.id)
Answer.objects.create(answer_text=answer_text, to_question=to_question, pub_date=now, answered_by=answered_by)
return render(request, 'askWisdom/answerQuestion.html', { 'result':'Thanks for Your Answer' })
except Question.DoesNotExist:
return HttpResponse("Question doesn't exist.")
except User.DoesNotExist:
return HttpResponse("Answering User doesn't exist.")
else:
return render(request, 'askWisdom/answerQuestion.html', {'form': form, 'error_message': form.errors })
實際的錯誤是: 「不能分配 「用戶:[email protected]」: 「Answer.answered_by」 必須是一個「用戶」實例「。
奇怪的是,我的回答模型有兩個ForeignKeys,但這樣做
Answer.objects.create(answer_text=answer_text, to_question=to_question, pub_date=now, answered_by=answered_by)
錯誤被標記在第二ForeignKey的時候(answered_by = answered_by),但不是第一個(to_question = to_question)假設他們按順序處理。
好了,所以將其更改爲強制在數據庫級別保存數字ID:
answered_by_id= User.objects.get(pk=request.user.id).id
Answer.objects.create(answer_text=answer_text, to_question=to_question, pub_date=now, answered_by_id=answered_by_id)
,我得到的錯誤: 「列answer.id不存在」
在這種情況下, ,Postgres數據庫中有一個名爲answers_by_id的實際列,所以我不明白它爲什麼尋找一個隱藏的,顯然是自動生成的「answer.id」列。
但無論如何,我寧願得到將實例傳遞給ForeignKey字段的默認方法。
有什麼明顯的我可以忽略?如果只是一個錯字,我會感到尷尬。
啊,是的。我安裝了使用內置用戶的django-allauth應用程序,但沒有刪除我自己的用戶模型。我把你的評論投了票,如果這是我接受的答案。 – Ron