如何访问 django 中的链接表
Posted
技术标签:
【中文标题】如何访问 django 中的链接表【英文标题】:How do I access the linked table in django 【发布时间】:2021-12-22 18:19:47 【问题描述】:我的博客在每篇博文中都有多个食谱。而且这些食谱在所有博客文章中都多次使用。
我正在尝试创建一个可以在网格中显示所有食谱的页面。一旦访问者点击一个食谱,我希望它链接到数据库中包含该特定食谱的第一篇博客文章。因为我的每篇博文都有 html 页面,但不是每个食谱都有。
我无法想象这将如何构建和完成。我应该重新设计模型还是有办法使用 django 模板来做到这一点?任何帮助将不胜感激!
models.py
class Posts(models.Model):
title = models.CharField(max_length=155)
summary = models.TextField(blank=True, null=True)
slug = models.SlugField(unique=True, max_length=155)
class PostRecipes(models.Model):
post = models.ForeignKey('Posts', models.DO_NOTHING)
recipe = models.ForeignKey('Recipes', models.DO_NOTHING)
class Recipes(models.Model):
title = models.CharField(max_length=155)
summary = models.TextField(blank=True, null=True)
content = models.TextField(blank=True, null=True)
views.py
def allrecipes(request):
recipes = Recipes.objects.all()
context =
'recipes': recipes,
return render(request, "All-recipes.html", context)
All-recipes.html
% for item in recipes %
<a href=" STATIC_URL / item.slug "> item.title </a>
% endfor %
【问题讨论】:
【参考方案1】:实际上你应该使用ManyToManyField
:
class Posts(models.Model):
title = models.CharField(max_length=155)
summary = models.TextField(blank=True, null=True)
slug = models.SlugField(unique=True, max_length=155)
class Recipes(models.Model):
title = models.CharField(max_length=155)
summary = models.TextField(blank=True, null=True)
content = models.TextField(blank=True, null=True)
posts = mdoels.ManyToManyField("Posts", related_name='recipes')
Django 文档示例:https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_many/
之后,您可以通过以下方式访问相关表:
Recipes.objects.first().posts # first recipe for example
Posts.objects.first().recipes # first post for example, accessing via related name
在你的模板中会是这样的:
% for item in recipes %
<a href=" STATIC_URL / item.posts.first.slug "> item.posts.first.title </a>
% endfor %
【讨论】:
谢谢阿明。你能告诉我如何使用它在 django 模板中呈现吗? 我已经为你更新了答案@haashe以上是关于如何访问 django 中的链接表的主要内容,如果未能解决你的问题,请参考以下文章
Python 图_系列之基于<链接表;实现无向图最短路径搜索