我在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)
答案 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/