如何从模板访问多对一关系主键值?

时间:2019-04-30 20:11:22

标签: python django

我与Item模型和Book模型(一种Item类型)有多对一的关系。 “项目”有一个主键,“书”有一个主键,还有一个外键,即item_id。

我使用内部联接在SQLite数据库上运行复杂的查询,以检索Item中的所有数据以及Book中的所有数据。从查询中获得的结果以及其他数据是两个pk作为id:一个来自Item,一个来自Book数据。在SQLite中,项目pk的标题为“ id”,而图书ID的标题列为“ id:1”。

在视图中,我运行查询以将对象收集到book_qs查询集中。

在模板中,我尝试遍历查询集以检索并在表中显示对象的值。因为有两个id或pks,一个用于Item,另一个用于Book,所以我无法弄清楚如何仅从查询集中检索标记为id:1的Book id pk。 ID返回商品ID。有时在循环中,我只想检索Book id,但是我需要循环通过book_qs以便在表中也显示其他数据。

mydata['book_qs'] = Item.objects.raw('SELECT  * FROM item INNER JOIN book ON item.id = book.item_id WHERE item.title = %s', [user_input]);

return mydata
{% for myitem in book_qs %}
    {{ myitem.id:1}}
    {% endfor %}

该代码导致模板语法错误。

2 个答案:

答案 0 :(得分:0)

在视图中,只需使用

app.post('/login', passport.authenticate('local', {
  successRedirect: '/accessed',
  failureRedirect: '/access',
  session: false
}));

存储返回的数据并制作如下字典:

book_qs

并将其传递给模板

d={'book_qs':book_qs}

在模板中这样做:

return render('abc.html', d) 

答案 1 :(得分:0)

由于一对多关系数据库中的“许多”类的数量是几个,并且此时我的数据库条目仍在测试中,因此我决定返回并修改模型以在每个模型中都包含一个显式主键名称。模型,可以更轻松地从模板访问这些自动生成的ID。 例如。

book_id = models.AutoField(primary_key=True)

因此

{% for myitem in book_qs %}
   {{ myitem.book_id }}
{% endfor %}