我想在查询集中显示子模型数据和父模型数据
这是我在model.py中的模型
class Shareholders(models.Model):
sharehold_IC = models.CharField(primary_key=True, unique=True, validators=[RegexValidator(r'^\d{12,12}$'), only_int], max_length=12)
sharehold_name = models.CharField(max_length=100, null=True)
sharehold_email = models.CharField(max_length=50, null=True, unique=True)
sharehold_address = models.TextField(null=True, blank=True)
password = models.CharField(max_length=100)
def __str__(self):
return self.sharehold_name
class Meeting(models.Model):
MEETING_STATUS = (
('Coming Soon', 'Coming Soon'),
('Live', 'Live'),
('Closed', 'Closed')
)
meeting_ID = models.CharField(primary_key=True, max_length=6, validators=[RegexValidator(r'^\d{6,6}$')])
meeting_title = models.CharField(max_length=400, null=True)
meeting_date = models.DateField()
meeting_time = models.TimeField()
meeting_desc = models.CharField(max_length=500, null=True)
meeting_status = models.CharField(max_length=200, null=True, choices=MEETING_STATUS)
date_created = models.DateTimeField(default=timezone.now, null=True)
def __str__(self):
return self.meeting_ID
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='shareholder_ic')
date_created = models.DateTimeField(default=timezone.now, null=True)
def __str__(self):
return str(self.meeting_id)
我尝试显示问题模型中的所有数据,以及股东模型中的股东详细信息,如股东姓名。 这就是我在Views.py中尝试的方法
视图.py
def getMessages(response, meeting_id):
meeting = Meeting.objects.get(meeting_ID=meeting_id)
questions = Question.objects.filter(meeting_id=meeting.meeting_ID)
# print(list(questions.values('shareholder_IC_id')))
for i in questions:
print(i.shareholder_ic.all())
return JsonResponse({"questions":list(questions.values())})
但不知怎的,我得到了这个错误。 我想得到这样的结果:
{'question_ID': 141, 'question': "I'm good. How are you?", 'meeting_id_id': '731404', 'shareholder_IC_id': '122311221231', 'date_created': datetime.datetime(2021, 10, 7, 3, 40, 12, 160029, tzinfo=<UTC>), 'sharehold_name':'John Steve', 'sharehold_email':'john@gmail.com'}
如何解决这个问题,或者是否有其他方式显示数据? 提前谢谢
你必须使用反向关系
不要触摸物体
对于其他设置,请在管理器中创建所需的查询集
首先,您没有在
Question
模型中正确使用related_name
属性。它不是使用替代名称来引用相关模型,相反,它是您希望用于引用相关模型中的Question
模型的名称,在您的案例中Shareholders
。您必须重新制作您的模型:然后,在
views.py
中,需要在Question
模型中使用正确的属性名,即shareholders_IC
:但是,为了实现您想要的,您应该使用Django REST Framework,或者自己序列化您将获得的不同实例:
我想推荐两件主要的事情:
Question
中不应该有属性meeting_id
。尽管在内部id确实被用于查询Meeting
,但属性与模型有关系,而不是与id相关问题 更多 >
编程相关推荐