django - 检查 Django 中是否存在具有 id 和 manytomany 字段的匹配对象
问题描述
我有如下所示的模型:
class Product(AdcBaseModel):
file_id = models.CharField(max_length=256, null=True, blank=True)
channels = models.ManyToManyField(Channel, blank=True)
在此模型中创建新条目时,我想检查是否已存在具有给定 file_id 和通道的条目。
例如。假设我在 Product 中有条目(注意:channels 是 ManytoMany 字段):
id file_id channels
1 ID_1 [11,12]
2 ID_2 [13,14]
2 ID_2 [15,16]
现在,如果我再次输入值 iof file_id 作为 ID_2 和通道作为 [15,16]。然后它应该检查这个条目是否已经存在。
对于 file_id 我可以做这样的事情:
Product.objects.filter(file_id="ID_2").exists()
我可以通过什么方式以相同的方式检查 ManytoMany 字段?
解决方案
您可以过滤由 django 创建的直通模型以形成 M2M。
例如,我有一个具有 M2M 关系的模型;
class Leaderboard(models.Model):
"""
Leaderboard model
"""
events = models.ManyToManyField(
verbose_name=_('events'),
to='entry.Event',
related_name='leaderboards'
)
在Event
模型上是一个模型的链接Client
,所以有一种情况是我们想找到Client
与 a 关联的,Leaderboard
所以使用以下查询;
qs = leaderboard.events.through.objects.filter(
leaderboard=leaderboard
).select_related(
'event__client'
)
因此,如果您这样做Product.channels.through.objects.filter()
了,您应该能够进行您熟悉的那种过滤。该表将有through
2 列用于这些 FK 关系。product_id
channel_id
推荐阅读
- php - 使用 PHP 调用公共 Instagram JSON 数据并将它们分配给变量
- jmeter - 远程服务器问题-分布式测试
- javascript - 用多个过滤器数组过滤一个数组
- scala - scala中使用模式匹配的数据共享dropWhile函数
- r - 将相同文件的多个 read.table() 的参数设置为变量
- javascript - 如何在服务器 nodejs 应用程序中管理身份验证令牌?
- android - 为什么 AsyncTask 不能实现除 doInBackground 之外的方法?
- angular - Angular Sidebar Treeview 没有响应
- python - 弹出一个负数有效但不为零
- javascript - 我可以将 html 元素的值附加/推送到从表单中的 html 表生成的数组的每一行吗?