Django获取外键对象值

时间:2014-11-05 12:20:07

标签: python django

我写了一个模型并保存了一些数据,但现在我不知道如何查询对象以及外键模型。

这是我的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.titleo.entitle来获取值。但我不知道如何从那里获得外键模型的价值

2 个答案:

答案 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替换了视图中的renderHere's why