python-3.x - 如何从多对多关系中的相关模型中提取数据?
问题描述
所以,我有两个应用程序,我想在我的项目中以多对多关系链接在一起。
第一个应用程序由以下模型描述。
模型.py:
class ChannelCategory(models.Model):
name = models.CharField(max_length=200, db_index=True)
def __str__(self):
return '%s' % self.name
class Channel(models.Model):
category = models.ForeignKey(ChannelCategory, on_delete=models.CASCADE)
name = models.CharField(max_length=200, db_index=True)
class Meta:
ordering = ['category']
def __str__(self):
return '%s (%s)' % (self.category, self.name)
第二个应用由以下模型描述
class Tariff(models.Model):
channels_list = models.ManyToManyField(Channel, blank=True, db_index=True, symmetrical=False)
def __str__(self):
return '%s' % self.name
def get_channels_categories(self):
return ([str(p.category) for p in self.channels_list.all()])
def get_channels_objects(self):
return ([str(p.name) for p in self.channels_list.all()])
现在我想做什么?假设资费对象包含4 个频道,它们有不同的类别,我们大致得到下图:资费 A 有来自2 个不同频道类别的4 个频道,例如,“超级”资费有
['ChannelCategory_1:Channel_1','ChannelCategory_1:Channel_3','ChannelCategory_2:Channel_2','ChannelCategory_2:Channel_4']
我不明白如何在界面上正确显示信息。我需要在我的模板上获取此类信息:
['ChannelCategory_1:'Channel_1','Channel_3'']
['ChannelCategory_2:'Channel_2','Channel_4'']
我会很高兴得到任何帮助,在此先感谢!
更新
为什么“QuerySet”对象中没有“channels_list”属性?
tariff = Tariff.objects.prefetch_related('channels_list')
category_channel_dict = defaultdict(list)
for channel in tariff.channels_list.all():
category_channel_dict[channel.category.name].append(channel.name)
解决方案
此代码将起作用:
from collections import defaultdict
tariff = Tariff.objects.prefetch_related('channels_list').filter(id=1)
category_channel_dict = defaultdict(list)
for channel in tariff.channels_list.all():
category_channel_dict[channel.category.name].append(channel.name)
OUTPUT:
{
'category_1': ['Channel1', 'Channel2'],
'category_2': ['Channel1', 'Channel2']
}
推荐阅读
- android - 如何在 Kotlin 片段内的按钮之间切换片段?
- amazon-web-services - 谁停止和启动 ECS 任务?并通知 ECS 服务
- gradle - 如何将文本文件添加到 Gradle 中的类路径?
- python - 错误在哪里以及如何避免错误字符错误
- javascript - 调用 URL 时对我的 JavaScript 代码感到困惑,不确定是否需要 Ajax 调用
- c - 通过SDL覆盖linux桌面条目中的图标
- android - 刷新时在 textview 上显示文本的字符串数组
- python - python中的heapq模块可以使用哪些类型的堆元素?
- java - 为什么设置新键盘后我的 Android 自定义 KeyboardView 会溢出?
- php - 如何在 AJAX 中显示 MYSQL 错误?