如何从连接表中获取多个值
How to get multiple values from joined tables
如何获取特定用户订阅的所有课程的所有规律?
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 订阅了 2 门课程:课程 A 和课程 B。
Course A laws: law1, law2, law3
Course B laws: law1, law20, law30
因此,当约翰登录时,我需要显示课程的规律和课程名称:
law1 - Course A, Course B
law2 - Course A
law3 - Course A
law20 - Course B
law30 - Course B
请注意,我无法展示law 1
两次,但我展示了包含此法则的每门课程。
我已经尽力说清楚了。提前谢谢
您可以使用集来存储法则(最终将是唯一的)。
laws_set = set()
subscriptions = Subscription.objects.filter(user=your_user, status=1)
对于每个订阅,获取课程,然后获取与该课程对应的所有法律。
for subscription in subscriptions:
laws = subscription.course.laws.all()
for law in laws:
laws_set.add(law)
现在laws_set中的每个法则都可以打印对应的课程了。
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')
如何获取特定用户订阅的所有课程的所有规律?
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 订阅了 2 门课程:课程 A 和课程 B。
Course A laws: law1, law2, law3
Course B laws: law1, law20, law30
因此,当约翰登录时,我需要显示课程的规律和课程名称:
law1 - Course A, Course B
law2 - Course A
law3 - Course A
law20 - Course B
law30 - Course B
请注意,我无法展示law 1
两次,但我展示了包含此法则的每门课程。
我已经尽力说清楚了。提前谢谢
您可以使用集来存储法则(最终将是唯一的)。
laws_set = set()
subscriptions = Subscription.objects.filter(user=your_user, status=1)
对于每个订阅,获取课程,然后获取与该课程对应的所有法律。
for subscription in subscriptions:
laws = subscription.course.laws.all()
for law in laws:
laws_set.add(law)
现在laws_set中的每个法则都可以打印对应的课程了。
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')