<p>首先,您没有在<code>Question</code>模型中正确使用<code>related_name</code>属性。它不是使用替代名称来引用相关模型,相反,它是您希望用于引用相关模型中的<code>Question</code>模型的名称,在您的案例中<code>Shareholders</code>。您必须重新制作您的模型:</p>
<pre><code>class Question(models.Model):
question_ID = models.AutoField(primary_key=True)
question = models.CharField(max_length=400, null=True)
meeting_id = models.ForeignKey(Meeting, on_delete=CASCADE)
shareholder_IC = models.ForeignKey(Shareholders_Meeting, on_delete=CASCADE, related_name='questions')
date_created = models.DateTimeField(default=timezone.now, null=True)
def __str__(self):
return str(self.meeting_id)
</code></pre>
<p>然后,在<code>views.py</code>中,需要在<code>Question</code>模型中使用正确的属性名,即<code>shareholders_IC</code>:</p>
<pre><code>def getMessages(request, meeting_id): # <- Shouldn't the first param be request?
meeting = Meeting.objects.get(meeting_ID=meeting_id)
# No need to use meeting.meeting_ID here, you can use the meeting instance
questions = Question.objects.filter(meeting_id=meeting)
for i in questions:
print(i.shareholder_IC) # <- No .all(), a question has only one shareholder
return JsonResponse({"questions":list(questions.values())})
</code></pre>
<p>但是,为了实现您想要的,您应该使用Django REST Framework,或者自己序列化您将获得的不同实例:</p>
<pre><code>def getMessages(request, meeting_id):
meeting = Meeting.objects.get(meeting_ID=meeting_id)
questions = Question.objects.filter(meeting_id=meeting)
questions_list = []
for i in questions:
questions_list.append(
{
"question_ID": i.question_ID,
"question": i.question,
"shareholder_IC_id": i.shareholder_IC.shareholder_IC,
...
}
)
return JsonResponse(questions_list)
</code></pre>
<p>我想推荐两件主要的事情:</p>
<ol>
<li>了解Django中的关系以及如何在模型中表示它们。例如,在<code>Question</code>中不应该有属性<code>meeting_id</code>。尽管在内部id确实被用于查询<code>Meeting</code>,但属性与模型有关系,而不是与id</li>
<li>使用DRF。这真的会帮你很多忙</李>
</ol>