django查看和上下文外键数据

时间:2013-03-23 01:02:13

标签: django django-templates django-views

我有一个名为Game的模型,它有一个ManyToManyField到用户

class Game(models.Model):

    name = models.CharField(max_length=64, blank=False)
    image = models.URLField(blank=True)
    user = models.ManyToManyField(User, related_name='game', blank=True)
    port = models.IntegerField()

    def __unicode__(self):
        return self.name

和视图

class Dashboard(TemplateView):
    template_name = 'dashboard.html'

    def get(self, request, *args, **kwargs):
        kwargs['games'] = Game.objects.filter(user=request.user)
        return super(Dashboard, self).get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):

        context = super(Dashboard, self).get_context_data(**kwargs)

        return context

这一切都有效,我脑子里面的问题是,访问游戏数据的最佳方式是什么。在我的模板中,我可以执行以下任一操作来访问游戏数据。

1。 像这样使用User对象

{% for g in user.game.all %}

2。 或使用从视图中专门传入的游戏对象

{% for g in games %}

虽然两者都有效,但有没有推荐的方法来做这种事情或者它们都有效吗?

如果两者都不有效,请想知道每种方法的优缺点是什么

干杯

1 个答案:

答案 0 :(得分:1)

我说使用RelatedManager来访问它们是最好的。这是您的第一个示例,{% for g in user.game.all %}它是内置的,专为此目的而设计,可以轻松访问相关模型。我不是专家,但既然你问过,我想我会分享我对它的价值的看法......