Django select_related FK模型

时间:2016-02-10 14:12:44

标签: django django-models django-views

我正在尝试列出电影模型中与Genre ForeignKey相关的所有对象说comedy类型列表与comedy相关的所有电影对象

# models.py
class Genre(models.Model):
    name = models.CharField(max_length=80, unique=True)
    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("genres:list", kwargs={"slug": self.slug})

class Movie(models.Model):
    title = models.CharField(max_length=80)
    genre = models.ForeignKey(Genre)


# views.py
def genre_list(request, slug):
    instance = get_object_or_404(Genre, slug=slug)
    movies = Movie.objects.select_related('genre').all()

    context = {
        "objects_list": movies,
    }
    return render(request, 'genres/genres_list.html', context)

模板视图genres/genres_list.html

{% for obj in objects_list %}
              <div class="box">
                  <b>{{ obj.title }}</b>
            </div>
{% endfor %}

什么都没有,我什么都没做错?

1 个答案:

答案 0 :(得分:3)

上下文中的变量名称object_list与模板objects_list中的变量名称不匹配。

context = {
    "object_list": shows,
}

{% for obj in objects_list %}

您需要在两个地方使用相同的变量名称。我建议object_list,因为它在Django中更常见,但是像movies这样的描述会更好。

最后,如果你想选择特定类型的所有电影,那么你应该使用filter

instance = get_object_or_404(Genre, slug=slug)
movies = Movie.objects.filter(genre=instance)

您目前正在使用select_related,这会做出不同的事情。