【发布时间】:2010-11-17 01:12:04
【问题描述】:
大家早上好,
我从事 PHP 程序员已经有一段时间了,但我觉得需要更多地朝着 Python 方向发展,还有什么比玩 Django 更好。
在此过程中,我遇到了一个停止点,我知道有一个简单的解决方案,但我只是想念它 - 如何在 Django 模板中显示多对多关系?
我的 Django 模型:(大部分字段已被删除)
class Category(models.Model):
name = models.CharField(max_length=125)
slug = models.SlugField()
categories = models.ManyToManyField(Category, blank=True, null=True)
class Recipe(models.Model):
title = models.CharField('Title', max_length=250)
slug = models.SlugField()
class Photo(models.Model):
recipe = models.ForeignKey(Recipe)
image = models.ImageField(upload_to="images/recipes", blank=True)
所以,我在应用程序中使用了一些基本模型,称为“食谱”。
话虽如此,我正在寻找两个问题的答案:
- 如何在其详细信息页面上显示食谱的类别?
- 如何在其详细信息页面上显示食谱的图像?
如果我进入 Python shell,并输入以下内容,我会得到一个结果:
>>> photos = Photo.objects.filter(recipe=1)
>>> photos
[<Photo: Awesome Pasta>]
>>> for photo in photos:
... print "Photo: %s" % photo.logo
...
Photo: images/recipes/2550298482_46729d51af__.jpg
但是,当我在模板中尝试以下类似操作时,我收到一条错误消息“无效的块标签:'photo.image'。”
{% for photo in photos %}
{% photo.image %}
{% endfor %}
尽管这确实有效,但 ID 仍被硬编码到视图中,您将如何为每个配方设置此动态?
详情页面View.py sn -p:
def details(request, slug='0'):
p = get_object_or_404(Recipe, slug=slug)
photos = Photo.objects.filter(recipe=1)
return render_to_response('recipes/recipes_detail.html', {'p': p, 'photos': photos})
提前感谢您的帮助和理解,这对你们所有人来说可能是一个非常简单的问题!
更新:删除模型中的附加字段时,我忘记了 Recipes 模型的类别字段。
【问题讨论】:
-
尽管问题在其标题中提到了 ManyToMany,但我实际上并没有看到任何已定义的 ManyToMany 字段。
-
“recipe = models.ForeignKey(Recipe)”在技术上不是多对多关系吗?如果不是,我为所使用的语言道歉,并很乐意更改它。
-
@R。 Bemrose - 抱歉,categories 字段是一个 ManyToMany 字段,在删除问题不需要的额外字段时,它只是被遗漏了。
标签: python django templates django-templates many-to-many