列出所有相关对象并允许对相关对象进行分页

时间:2013-03-17 10:46:47

标签: django

有人可以通过以下示例为我提供最佳方法......

在页面上,我按ID加载“”对象。我还想列出属于该组的所有联系人(带分页)。

由于分页问题,​​我考虑用...运行第二个数据库查询

在我看来......

group = get_object_or_404(Group, pk=id)
contacts = Contacts.objects.filter(group=x) 

但这似乎很浪费,因为我已经让小组为什么要两次打到数据库。

看我的模特。

class GroupManager(models.Manager):

    def for_user(self, user):
        return self.get_query_set().filter(user=user,)


class Group(models.Model):
    name = models.CharField(max_length=60)
    modified = models.DateTimeField(null=True, auto_now=True,)

    #FK
    user = models.ForeignKey(User, related_name="user")

    objects = GroupManager()


    def get_absolute_url(self):
        return reverse('contacts.views.group', args=[str(self.id)])


class Contact(models.Model):

    first_name = models.CharField(max_length=60)
    last_name = models.CharField(max_length=60)

    #FK
    group = models.ForeignKey(Group)

1 个答案:

答案 0 :(得分:1)

这是select_related的目的:

  

返回一个自动“跟随”外键的QuerySet   关系,选择其他相关对象数据时   执行其查询。这是一个性能助推器,导致   (有时候很多)更大的查询,但意味着以后使用外键   关系不需要数据库查询。

在你的情况下,它将是:

Group.objects.select_related().get(pk=group) 

现在,在每次FK查找时,您都不会再次访问数据库。

下一步是使用cache api缓存结果,这样每次调用下一个“页面”时都不会访问数据库。如果您的数据不是时间敏感的,这将非常有用。