【问题标题】:How to apply filter on Many to many field without using for loop如何在不使用 for 循环的情况下对多对多字段应用过滤器
【发布时间】:2020-01-12 00:59:45
【问题描述】:

我的模型就像

class Company(models.Model):
    name = models.CharField(max_length=400, blank=True, null=True)

class Intership(models.Model):
    company = models.ForeignKey(Company)
    location = models.CharField(max_length=400, blank=True, null=True)


class Student(models.Model):
    name = models.CharField(max_length=400, blank=True, null=True)
    intership = models.ManyToManyField(Intership,null= True, blank=True)

我期待所有在一家名为“xyz”的公司实习的学生。

我有密码

company_name = "xyz"
stds
for student in students:
    interships = student.intership.all()
    for intership in interships:
        if intership.company.name == company_name:
            stds.append(student)

是否有可能在一个查询中获得所有这些信息??

【问题讨论】:

  • Student.objects.filter(intership__company__name =company_name )?

标签: python django filter many-to-many


【解决方案1】:

Mymodel.objects.filter(username='abcd') 将给出匹配记录列表

Mymodel.objects.get(pk='abcd') 将返回与主键值匹配的单条记录

【讨论】:

    【解决方案2】:

    您可以只过滤Students 本身:

    Student.objects.filter(<b>intership__company__name=<i>'xyz'</i></b>)

    您可能想在此处使用.distinct(),否则Student 将多次列出同一公司的多个实习机会:

    Student.objects.filter(intership__company__name=<i>'xyz'</i>)<b>.distinct()</b>

    注意:是inter<b>n</b>ship,不是intership

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2011-04-26
    • 2014-05-01
    相关资源
    最近更新 更多