检查 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_idchannel_id