我有一个问题模型和一个答案模型。答案模型保存特定于登录用户的答案。我已经成功保存了登录用户的答案,并在admin中进行了验证。但是,我无法得到答案,特别是对于登录的用户。你能给我指个正确的方向吗?我已经试过了https://docs.djangoproject.com/en/3.1/ref/models/relations/
我的模型:
class Question(models.Model):
question = models.CharField(max_length=200, null=True, blank=True)
edit_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.question
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
answer = models.TextField(max_length=600, null=True, blank=True, default=" ")
edit_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.answer
我的观点
def InterviewQuestion(request):
questions = Question.objects.all()
context = {'questions':questions}
return render(request, 'jobs/ace-interview.html', context)
我的模板{% for question in questions %}
<div class="card">
<div class="card-body">
<h5 class="card-title">{{question.question}}</h5>
<p class="card-text">{{question.answer_set.answer}}</p>
</div>
</div>
{% endfor %}
我希望这里的答案特定于用户
您需要根据当前登录的用户过滤Answer
,将其传递给模板的上下文,然后在HTML页面上呈现。类似以下语句:
在你看来:
def InterviewQuestion(request):
questions = Question.objects.all()
question_answers = {}
for question in questions:
answer = Answer.objects.filter(user=request.user, question=question).first()
question_answers[question] = answer
context = {'question_answers': question_answers}
return render(request, 'jobs/ace-interview.html', context)
使用上面的代码,你现在将得到一个特定于用户的字典,看起来像这样(请记住,它不是键/值的str
,而是Django模型):
{
...
"Your name?": "Felipe",
...
# Realistically, it looks something more like:
<Question Model>: <Answer Model>
}
将上述内容传递给上下文将允许您呈现问题和答案。
{% for question, answer in question_answers.objects %}
<div class="card">
<div class="card-body">
<h5 class="card-title">{{question.question}}</h5>
<p class="card-text">{{answer.answer}}</p>
</div>
</div>
{% endfor %}
这样的东西应该可以工作。你可能想要按照自己的喜好格式化视图代码,并仔细检查语法是否正确(直接在StackOverflow上编写-不检查我的端)。