【问题标题】:Django get the foreign key object valueDjango 获取外键对象值
【发布时间】:2014-11-05 12:20:06
【问题描述】:

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

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

【问题讨论】:

  • 使用您的模型集,您可以将多个MovieImages 用于单个Movie。你只想得到其中之一?我也猜想当你写YahooMovie你的意思是Movie
  • 是的。这是电影。我编辑它

标签: python django


【解决方案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 %}

附言 您可能已经注意到,我将视图中的render_to_response 替换为renderHere's why

【讨论】:

  • @user2492364 确定,很高兴能帮上忙 =]
【解决方案2】:

正如我在 cmets 上告诉你的,每个 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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2018-12-01
    • 1970-01-01
    • 2013-12-28
    • 2017-10-03
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多