2014-11-05 3 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.title, o.entitle이 값을 얻을 수 있습니다 알고 있습니다. 하지만 거기에서 외래 키 모델의 가치를 얻는 방법을 모르겠다.

+0

모델 세트를 사용하면 하나의 '동영상'에 대해 여러 개의 'MovieImage'를 가질 수 있습니다. 그들 중 하나만 갖고 싶습니까? 나는 또한 당신이'YahooMovie'라고 쓸 때'Movie'를 의미한다고 생각합니다. – cor

+0

예. 영화입니다. 나는 그것을 편집해라 – user2492364

답변

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

+0

@ user2492364 확실한 물건, 도와 줬기 위해 행복하다] – yuvi

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