python-3.x - 通过 Django M2M 字段查询
问题描述
我有这些模型,通过 WordCloudSouce 从 WordCloud 到 Source 的 M2M 字段
class Source(Model):
source_id = models.AutoField(primary_key=True)
source_name = models.CharField(max_length=64, default="foobar")
class WordCloud(Model):
cloud_id = models.AutoField(primary_key=True)
cloud_name = models.CharField(max_length=125, unique=True)
sources = models.ManyToManyField(Source, related_name="sources", through='WordCloudSource')
class WordCloudSource(Model):
wordcloud_sources_id = models.AutoField(primary_key=True)
wordcloud = models.ForeignKey(WordCloud, on_delete=models.CASCADE)
source = models.ForeignKey(Source, on_delete=models.CASCADE)
我想构造一个查询来查找wordcloud
具有cloud_name='frank'
和sources
作为字符串列表的 a (例如['a', 'b']
or ['a']
)。
我正在寻找类似的东西:
WordCloud.objects.filter(cloud_name='frank', sources=['a', 'b'])
但我不清楚如何编写一个遍历sources
M2M 字段的查询以获取wordcloud
. 我已经阅读了 3.0 的 Django 文档,但对我来说仍然没有任何意义。
我想要的行为如下。假设我们有以下内容:
w1
=Wordcloud
带有name=frank
和的对象sources=['aa']
w2
=Wordcloud
带有name=frank
和的对象sources=['aa', 'bb']
查询filter(name='frank', sources=['aa'])
应该只匹配w1
.
查询filter(name='frank', sources=['aa', 'bb'])
应该只匹配w2
我做到了
WordCloud.objects.filter(cloud_name='frank', sources__source_name__in=['aa', 'bb'])
但这是不正确的,因为它返回以 and 命名frank
的wordcloud sources=['aa']
,sources=['aa', 'bb']
这不是我想要的。
谢谢!
解决方案
推荐阅读
- xamarin - 是否可以在 Xamarin.Forms 中设置固定大小的字体?
- android - 基本适配器中的 notifyDatasetChanged 问题
- firebase - Firebase / Google Cloud Function cron 函数返回 INVALID_ARGUMENT
- java - 在“Last Exec”下,使用 JVM 的字符串重复数据删除设置,为什么这么多被列为“重复数据删除”,而很少有人被描述为“新”
- wordpress - 如何修复“WordPress 无法写入某些文件”错误,管理员无法更改网站
- android - Kotlin - 缩放画布性能问题
- r - 循环遍历数据框时如何引用同一行中的元素?
- c# - 在启动时访问 dbcontext
- android - Android WebView和html透明背景
- sql - 哪种商店类型按销售金额和销售数量销售的产品最多