python - 如何在Django中查询多对多关系

标签 python django django-models django-templates django-views

我有一个包含不同组织类型的组织列表。我有一个表,其中包含姓名、电话等信息……还有另一个表,其中的 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 的菜鸟,因此我们将不胜感激。

谢谢

最佳答案

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

  1. 了解不同的俱乐部类型
  2. 对于每种俱乐部类型,请选择包含该类型的俱乐部(另请参阅 this)
  3. 按字母顺序对第 2 个选项进行排序

有很多方法可以实现这一点,我不建议将此逻辑放入模板中,因为一个简单的事实是,在 View 中表达其背后的逻辑可能更容易(或者在 custom Manager 中,如果您以后想冒险的话)在你的 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, ...]), ... ]

关于python - 如何在Django中查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7355178/

相关文章:

python - Django 3.1 |管理员页面外观问题

Django:模板 Assets 的静态文件夹

python - 如何使用 print 并且不在参数之间添加空格?

python - 如何将从一个 TreeView 中选择的项目插入到另一个 TreeView 中

python - 将带有 DatetimeIndex 的 Pandas DataFrame 按 na 或缺失的行拆分为 block

javascript - 在 django 模板的内部 css 中使用上下文变量

Django 1.8 迁移。在创建数据库后添加 DateTimeField。最佳实践?

python - Django Rest Framework - 使用 model.ModelViewSet 更新模型

python - 我们可以不使用 on_delete 只定义 models.CASCADE 吗?

Python - 网络WMI远程运行exe,抓取文本结果