过滤多对多表django

时间:2014-08-18 07:42:33

标签: python django

我在Django中有以下show table。我想要的是我在ShowInfo上有一个过滤器,它给了我4个结果。现在我想要没有for循环的所有4个节目的相关节目。因为for循环给了我重复的值。我希望在没有循环的情况下获得所有已过滤显示的相关节目。

class ShowInfo(models.Model):

    name = models.CharField(max_length=250)
    related_shows = models.ManyToManyField('self', blank=True, related_name='all_related_shows', symmetrical=True)

1 个答案:

答案 0 :(得分:0)

当您使用特定节目时,您可以这样做:

s = ShowInfo.objects.get(pk=id) #assuming id is the id of a specific show
s.related_shows.all() #This will return all shows without duplicates.

现在,如果你只想要4个结果:

s.related_shows.all()[:4]

要迭代此related_show,您可以:

for r in s.related_shows.all():
    r.related_shows.all()

它不会给你重复的结果。但是,如果您希望整个集合中没有重复的结果,可以使用set:

all_results = []
for r in s.related_shows.all():
    all_results.append(show for r.related_shows.all())

set(all_Results) #This will show you a set with all_shows without duplicates

以下是有关多对多关系的一些信息:https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/