通过两个关系

时间:2018-03-06 17:20:26

标签: django django-queryset

我有代表人物和图书的模型,这些模型通过可以表明其角色的直通模式加入(例如'作者'编辑'):

from django.db import models

class Person(models.Model):
    name = models.CharField()


class Book(models.Model):
    title = models.ChartField()

    people = models.ManyToManyField('Person',
                            through='BookRole', related_name='books')


class BookRole(models.Model):
    person = models.ForeignKey('Person', related_name='book_roles')

    book = models.ForeignKey('Book', related_name='roles')

    role_name = models.CharField()

我有一个阅读模型,代表了一本书被阅读的场合:

class Reading(models.Model):
    book = models.ForeignKey('Book')

    start_date = models.DateField()
    end_date = models.DateField()

我知道如何获得与Person订购的Book订购的from django.db.models import Count from .models import Person Person.objects.annotate(num_books=Count('books')) \ .order_by('-num_books') 列表:

Person

但是如何根据Book被读取的次数(即与Reading相关的Book的数量来获得- hosts: rhel7_64Guest become: yes roles: - role: selinux tags: selinux - role: timezone tags: timezone - role: dns tags: dns - role: sosreport when: ansible_hosts_failed tags: - sosreport - always 的列表。 }}为s)?

1 个答案:

答案 0 :(得分:4)

您可以使用标准的django双下划线表示法:

resolve:{
    isLoggedIn:function(sessionService, $state, $rootScope){
            return sessionService.checksession();
        }
    }
}

有关详细信息,请参阅joins and aggregates上的文档。