[英]Django foreign key relation
我最近开始使用Python和Django来制作网站,但遇到了一个我无法解决的问题。
您可以肯定,这是由于我完全没有经验,而我却忽略了一些简单的事情或做了一些愚蠢的事情,但是哦。
在我的网站上,我有一个页面来显示有关食谱的详细信息(说明,成分,说明等)。 我正在这样显示:
views.py
class RecipeView(generic.DetailView):
model = recipe
template_name = 'whatsfordinner/recipe.html'
context_object_name = 'details'
到目前为止,我已经能够显示我的单个信息,没问题({{details.whatever}})
我的问题是指令和成分都作为外键关系存储在我的数据库中,因此需要以不同的方式输出。 我的数据库如下所示:
class recipe(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(default="No decsription added")
image = models.ImageField(upload_to='images/',
default='images/default.jpg')
total_favourites = models.IntegerField()
servings = models.IntegerField()
def __str__(self):
return self.title
class ingredients(models.Model):
recipe = models.ForeignKey(recipe)
ingredient = models.CharField(max_length=255)
我很难为我选择的食谱输出相关的食材,我很乐意提供一些指导。
对于配方对象,说r
:
r.ingredients_set.all()
将列出与该食谱链接的所有成分。
您可以对此进行进一步过滤: r.ingredients_set.filter(title__startswith='clover')
Django文档中有完整的指南: https : //docs.djangoproject.com/en/1.9/topics/db/examples/many_to_one/
假设您想要在您的views.py中列出食谱的所有成分的清单:
ingredient_list = r.ingredients_set.all()
然后将上下文字典中的Ingredient_list传递给模板。 如果您不知道上下文字典是什么,那么您在做什么,请阅读Django文档! 很多人都在花很多精力来创建漂亮的文档。
假设context['ingredients'] = ingredient_list
,其中context
是您要传递给模板html的上下文字典。 然后在您的模板中,使用Django模板语言执行以下操作:
{% for i in ingredients %}
<p>{{ i.ingredient }}</p>
{% endfor %}
这里ingredients
是ingredient_list
您使用上下文传递字典,并且对于每个成分对象i
在for循环中,正在显示的值<ingredient object i>.ingredient
如果有帮助,这是官方教程的链接。 https://docs.djangoproject.com/zh-CN/1.9/intro/tutorial01/
参见此处: https : //docs.djangoproject.com/zh-CN/1.9/topics/class-based-views/generic-display/#adding-extra-context
class PublisherDetail(DetailView):
model = Publisher
class RecipeView(generic.DetailView):
model = recipe
template_name = 'whatsfordinner/recipe.html'
context_object_name = 'details'
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(RecipeView, self).get_context_data(**kwargs)
# Add in a QuerySet of all the books
context['ingredient_list'] = recipe.ingredients_set.all()
return context
以上未经测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.