Django 如何从联接表中获取多个值

Django 如何从联接表中获取多个值,django,django-orm,Django,Django Orm,如何从特定用户订阅的所有课程中获取所有法律 class Law(models.Model): name = models.CharField('Nome', max_length=100) slug = models.SlugField('Atalho') description = models.TextField('Description', blank = True, null=True) class Course(models.Model): name

如何从特定用户订阅的所有课程中获取所有法律

class Law(models.Model):
    name  = models.CharField('Nome', max_length=100)
    slug = models.SlugField('Atalho')
    description = models.TextField('Description', blank = True, null=True)

class Course(models.Model):
    name  = models.CharField('Nome', max_length=100)
    slug = models.SlugField('Atalho')
    description = models.TextField('Descrição', blank = True, null=True)
    laws = models.ManyToManyField(Law, related_name='law_course')


class Subscription(models.Model):    
    STATUS_CHOICES=(
        (
            (0, 'Pendente'),
            (1, 'Approved'),
            (2, 'Canceled'),
        )
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, verbose_name="Usuário", related_name="inscricao") #inscricao é criado no usuario
    course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name="Course", related_name="subscription")
    status = models.IntegerField(
        'Status', choices=STATUS_CHOICES, default = 0, blank=True
        )

    class Meta:
        unique_together = (('user','course'))
因此,用户可以订阅一个或多个课程。每门课程都有一条或多条定律

我有一个页面,需要列出特定用户订阅的每门课程的所有法律,如果订阅获得批准(
status=1
)。 例子: 用户John订阅了两门课程:课程A和课程B

Course A laws: law1, law2, law3
Course B laws: law1, law20, law30
因此,当John登录时,我需要显示课程规则和课程名称:

law1 - Course A, Course B
law2 - Course A
law3 - Course A
law20 - Course B
law30 - Course B
请注意,我不能两次展示
法则1
,但我展示了包含该法则的每门课程


我尽了最大的努力澄清。Tks预先

您可以使用集合来存储规则(最终将是唯一的)

对于每个订阅,获取课程,然后获取与该课程对应的所有法律

for subscription in subscriptions:
    laws = subscription.course.laws.all() 

    for law in laws:
        laws_set.add(law)
现在,对于laws_集合中的每个法律,您可以打印相应的课程

for law in laws_set:
    print(law.name, end='')
    for course in law.law_course.all(): # Since law_course is the related name
        print(course.name, end='')
    print('\n')

您可以使用集合来存储规则(最终将是唯一的)

对于每个订阅,获取课程,然后获取与该课程对应的所有法律

for subscription in subscriptions:
    laws = subscription.course.laws.all() 

    for law in laws:
        laws_set.add(law)
现在,对于laws_集合中的每个法律,您可以打印相应的课程

for law in laws_set:
    print(law.name, end='')
    for course in law.law_course.all(): # Since law_course is the related name
        print(course.name, end='')
    print('\n')