我试图根据我的gadb_vote模型中的action_ids访问我的gadb_action模型中的信息。我最初只是获取特定立法者的信息,然后试图获得与立法者投票所采取的行动相关的法案。
现在,我的action_list只存储action_ids,但不存储我想在模板中使用的gadb_action模型中的相关信息。
在模板访问的for循环之外存储该信息的最佳方法是什么?有没有办法写一个空的QuerySet?
提前感谢您提供的任何帮助!
视图
def each_member(request,legislator_id):
each_member = get_object_or_404(gadb_legislator, legislator_id=legislator_id)
each_vote = gadb_vote.objects.filter(legislator_id=legislator_id)
action_list = []
for i in each_vote:
action = gadb_action.objects.filter(action_id=i.action_id)
action_list.append(action)
context = {
'each_member': each_member,
'each_vote': each_vote,
'action_list': action_list
}
return render(request, "eachmember.html", context)
模型
class gadb_action(models.Model):
action_id = models.IntegerField(unique=False, max_length=4, primary_key=True)
bill_id = models.IntegerField(unique=False, max_length=12)
class gadb_vote(models.Model):
vote_id = models.IntegerField(unique=False, max_length=11,primary_key=True)
legislator_id = models.IntegerField(unique=False, max_length=11)
action_id = models.IntegerField(unique=False, max_length=11)
模板
{% for i in action_list %}
{{i.bill_id}}
{{i.action_id}}
{% endfor %}
答案 0 :(得分:1)
你的模特坏了。
首先,虽然它与问题没有直接关系,但您需要将主键定义为AutoFields,以便每次添加新实体时自动增加它们。否则,在保存新行时,您将收到各种错误。 (更好的是,根本不要定义PK,让Django自动添加它。)
其次,正如lalo所说,你应该有从行动到比尔的外国人,从投票到行动和投票到立法者。这样,您可以通过单个查询获取相关信息,并按照模板中的要求执行外键。
(此外,Django已在基础表名称中包含应用名称:无需使用' gadb'前缀所有内容。)
class Action(models.Model):
bill = models.ForeignKey(Bill)
class Vote(models.Model):
legislator = models.ForeignKey(Legislator)
action = models.ForeignKey(Action)
查看:
def each_member(request,legislator_id):
actions = Action.objects.filter(vote__legislator_id=legislator_id)
return render(request, "eachmember.html", {'action_list': actions})
模板:
{% for action in actions %}
{{ action.bill.name }}
{{ action.someotherfield }}
{% endfor %}