我写了一个模型并保存了一些数据,但现在我不知道如何查询对象以及外键模型。
这是我的models.py
:
class Movie(models.Model):
link = models.URLField()
title = models.CharField(max_length=255, null=True)
title_en = models.CharField(max_length=255, null=True)
class MovieImage(models.Model):
movieimage = models.ForeignKey(Movie,null=True,blank=True)
img_link = models.URLField(max_length=255, null=True)
view.py
:
def index(request):
obj = Movie.objects.all()
contacts = get_paginator(request, obj, 10)
return render_to_response("movie/index.html",
{'title': title ,'obj':obj,'contacts':contacts},
context_instance=RequestContext(request))
movie/index.html
:
{% for o in obj %}
<div class="col-md-12 item">
<p><h3>{{ o.title }}</h3></p>
<div class="pic">
{{ o.img_link }} <!--I want to show the img_link but don't know how to do this -->
</div>
</div>
{% endfor %}
我知道我可以使用o.title
,o.entitle
来获取值。但我不知道如何从那里获得外键模型的价值
答案 0 :(得分:2)
正如我在评论中告诉你的那样,你需要为每个MovieImage
大豆Movie
提供超过{% for o in obj %}
<div class="col-md-12 item">
<p><h3>{{ o.title }}</h3></p>
<div class="pic">
{% for image in o.movieimage_set.all %}
{{image.img_link}}
{% empty %}
<p>This obj doesn't have any image</p>
{% endfor %}
</div>
</div>
{% endfor %}
%的大豆。
{{1}}
答案 1 :(得分:1)
首先 - 一些命名约定 - obj
是一个非常通用的名称,并不意味着什么。使用像movies
这样的东西可能是个好主意。此外,如果模型名为MovieImage
,为什么还有一个名为img_link
的字段?那有点重复,你不觉得吗?这种方式会更好:
#models.py
class MovieImage(models.Model):
movie = models.ForeignKey(Movie,null=True,blank=True)
src = models.URLField(max_length=255, null=True)
然后你可以这样做:
#views.py
def index(request):
movies = Movie.objects.all() # movies instead of obj
contacts = get_paginator(request, movies, 10)
return render(request, "movie/index.html",
{'title': title ,'movies':movies,'contacts':contacts})
最后,对于实际答案 - 相关对象的默认名称为foo_set
(在您的情况下为movieimage_set
),您可以这样迭代:
# html
{% for movie in movies %}
<div class="col-md-12 item">
<p><h3>{{ movie.title }}</h3></p>
<div class="pic">
{% for image in movie.movieimage_set.all %}
<img src="{{ image.src }}"> <!-- I am assuming you actually want to show the image, not just the link -->
{% endfor %}
</div>
</div>
{% endfor %}
<强> P.S。强>
您可能已经注意到,我使用render_to_response
替换了视图中的render
。 Here's why