检查 Django 中是否存在具有 id 和 manytomany 字段的匹配对象
Check if matching object exist with id and manytomany field in Django
我有如下所示的模型:
class Product(AdcBaseModel):
file_id = models.CharField(max_length=256, null=True, blank=True)
channels = models.ManyToManyField(Channel, blank=True)
在该模型中创建新条目时,我想检查给定的 file_id 和频道是否已存在条目。
例如。
假设如果我在产品中输入为(注意:通道是 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
模型上是一个link到一个Client
模型,所以有一种情况我们想找到与[=关联的Client
15=] 所以使用下面的查询;
qs = leaderboard.events.through.objects.filter(
leaderboard=leaderboard
).select_related(
'event__client'
)
因此,如果您这样做了 Product.channels.through.objects.filter()
,您应该能够进行您熟悉的那种过滤。对于那些 FK 关系,through
table 将有 2 列 product_id
和 channel_id
。
我有如下所示的模型:
class Product(AdcBaseModel):
file_id = models.CharField(max_length=256, null=True, blank=True)
channels = models.ManyToManyField(Channel, blank=True)
在该模型中创建新条目时,我想检查给定的 file_id 和频道是否已存在条目。
例如。 假设如果我在产品中输入为(注意:通道是 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
模型上是一个link到一个Client
模型,所以有一种情况我们想找到与[=关联的Client
15=] 所以使用下面的查询;
qs = leaderboard.events.through.objects.filter(
leaderboard=leaderboard
).select_related(
'event__client'
)
因此,如果您这样做了 Product.channels.through.objects.filter()
,您应该能够进行您熟悉的那种过滤。对于那些 FK 关系,through
table 将有 2 列 product_id
和 channel_id
。