如何过滤ManyToMany字段?

时间:2019-07-29 16:09:56

标签: django

我有一个称为“父母”的模型。在模型中,我有一个名为partner_types的ManyToManyfield。基于模型Partner_type。我想做的是过滤模型以检查某人是否是父母。

我尝试了过滤器集,但问题是我的partner_type是在管理员中定义的,因此我无法对其进行过滤。

class PartnerType(models.Model):

    name = models.CharField(blank=False,
                        help_text="Name of the role or function", max_length=64,
                        verbose_name="Partner Type", )

class Partner(TimeStampedModel, StatusModel):
    name = models.CharField(blank=True, max_length=100, verbose_name='Account Name', )
    partner_types = models.ManyToManyField(PartnerType)

所以我当前在管理员中创建的合作伙伴类型为: 经纪人, 服务, 发行人 顾客, 父母

这是我尝试过的。

a = Partner.objects.filter(partner_types= Partner)

但是它不起作用。

我也尝试过。

a = Partner.objects.filter(partner_types = 4) for the numerical value of the many to many field object.

2 个答案:

答案 0 :(得分:0)

执行此操作的方法有多种,具体取决于表示“父”是您感兴趣的PartnerType的视图信息的精确程度。

一种方法是过滤相关的CharField

a = Partner.objects.filter(parter_types__name="parent")

如果您实际上已经加载了PartnerType实例,则可以直接提供该实例:

parent = ParterTypes.objects.get(name="parent") # or whatever
...
a = Partner.objects.filter(parter_types=parent)

您基于ID的查询Partner.objects.filter(partner_types=4)也是有效的,因此,如果没有得到您期望的结果,则可能需要进行一些数据检查。但是,相对于基于内容的过滤器,通常依赖于硬编码的PK是一个坏主意。

答案 1 :(得分:0)

这应该有效。

a=Partner.objects.filter(partnertype__name="Parent")