2014-11-05 115 views
1

我寫了一個模型並保存了一些數據,但現在我不知道如何查詢對象以及外鍵模型。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來獲取值。但我不知道如何從那裏獲得外鍵模型的值

+0

與您的模型組,您可以有多個'MovieImage'單個'電影'。你只想得到其中一個?我也猜測,當你寫'雅虎電影'時,你的意思是'電影' – cor 2014-11-05 12:24:06

+0

是的。這是電影。我編輯它 – user2492364 2014-11-05 12:39:47

回答

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 %} 

ps 您可能已經注意到,我用render替換了render_to_response的意見。 Here's why

+0

非常感謝你!!!你描述得非常清楚。我知道如何編輯它現在 – user2492364 2014-11-05 12:55:18

+0

@ user2492364肯定的事情,很高興有幫助=] – yuvi 2014-11-05 14:28:09

2

正如我在評論中告訴你的,你可以爲每個Movie有大於MovieImage的大豆,你需要遍歷它們。

{% 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 %}