Python 如何在Django中查询多对多关系

Python 如何在Django中查询多对多关系,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我有一个不同组织类型下的组织列表。我有一张桌子,上面有姓名、电话等。。。然后是另一个id固定为组织类型的表。然后是一个包含多对多关系的表,因为一个组织可以有许多不同的组织类型 我想做的是按字母顺序列出所有属于每种组织类型的俱乐部 我不确定这是需要在views.py中完成,还是应该在我的模板文件中完成 以下是我的模型: class ClubType(models.Model): name = models.CharField(max_length = 250) def __uni

我有一个不同组织类型下的组织列表。我有一张桌子,上面有姓名、电话等。。。然后是另一个id固定为组织类型的表。然后是一个包含多对多关系的表,因为一个组织可以有许多不同的组织类型

我想做的是按字母顺序列出所有属于每种组织类型的俱乐部

我不确定这是需要在views.py中完成,还是应该在我的模板文件中完成

以下是我的模型:

class ClubType(models.Model):
    name = models.CharField(max_length = 250)

    def __unicode__(self):
        return self.name

class Club(models.Model):

    name = models.CharField(max_length = 250,
            verbose_name = "Club or Organization Name",
            )
    created_date = models.DateTimeField(
            auto_now_add = True,
            )
    updated_date = models.DateTimeField(
            auto_now = True,
            auto_now_add = True,
            )
    club_type = models.ManyToManyField(ClubType)
    username = models.CharField(max_length = 100,
            blank = True, null = True
            )
    contact_name = models.CharField(max_length = 250,
            blank = True, null = True,
            )
    phone_number = models.CharField(max_length = 250,
            blank = True, null = True,
            )

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ('name', )
我是python和Django的高手,因此非常感谢您的帮助


谢谢

基本上,您需要执行以下步骤:

获得不同的俱乐部类型 对于每个俱乐部类型,选择包括该类型的俱乐部,另请参见 按字母顺序从2中对所选内容进行排序 有很多方法可以实现这一点,我不建议将这一逻辑放入模板中,因为一个简单的事实是,如果你以后在Django生活中喜欢冒险,那么在视图中或在场景中表达背后的逻辑可能会更容易

警告示例:未测试代码:

# step 1
club_types = ClubTypes.objects.distinct()

# step 2 & #3
club_sets = []
for current_club_type in club_types:
    cset = Clubs.objects.filter(club_type__id=current_club_type.pk).order_by('name')
    club_sets.append((current_club_type, cset))
最后剩下的是一个俱乐部类型列表,每个列表按以下形式的名称排序:

[clubtype1[club1,club2,…],clubtype2[club2,club8,…]


你能用一些代码更新这个问题吗?至少是模型。您是否使用ManyToManyField来表示关系?我支持该动议,一些代码可能会很好,否则很难回答这个问题。您提到的那些表的models.py中的代码。我的模板文件中的逻辑是什么样的?我需要在那里做一个forloop吗?这看起来像是在创建一个大数组,对吗?假设您想将信息显示为俱乐部类型列表,每个类型都有一个子列表,那么您只需要一个嵌套的for循环就可以遍历俱乐部集合结果。更新了答案,并举例说明了club_集合中的数据是什么样子。这主要起作用,除了我希望能够在所有club类型的每个列表上方显示club类型名称。因此,记住club类型也很简单。该示例已更新。现在您得到了一个clubtype形式的元组列表,clubs。