gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:04:43 31 4
gpt4 key购买 nike

我有一个完整的不同组织类型的组织列表。我有一个包含姓名、电话等的表,然后是另一个具有固定到组织类型的 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com