Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 相关对象的Django查询集_Python_Django_Django Queryset - Fatal编程技术网

Python 相关对象的Django查询集

Python 相关对象的Django查询集,python,django,django-queryset,Python,Django,Django Queryset,具有以下型号: class Company(models.Model): name = models.CharField(max_length=10) class Department(models.Model): name = models.CharField(max_length=10) company = models.ForeignKeyField(to=Company) persons = models.ManyToManyField(to=P

具有以下型号:

class Company(models.Model):
    name = models.CharField(max_length=10)
    
class Department(models.Model):
    name = models.CharField(max_length=10)
    company = models.ForeignKeyField(to=Company)
    persons = models.ManyToManyField(to=Person, on_delete=models.PROTECT)

class Person(models.Model):
    name = models.CharField(max_length=10)


我想获得公司所有人员的
queryset

使用

会是

  • 返回列表而不是查询集(不可筛选等)

  • 在这里获取查询集的方法是什么?

    首先,您必须将外键绑定到您的公司或部门

    class Department(models.Model):
        name = models.CharField(max_length=10)
        company = models.ForeignKeyField(to=Company, related_name="department_company_key")
    
    class Person(models.Model):
        name = models.CharField(max_length=10)
        person_department = models.ForeignKey(
            'Department',
            related_name="person_department_key"
            on_delete=models.CASCADE,
            blank=False,
            null=False
        )
    
    然后在您的函数中:

    def persons_by_company(company_name):
        l = []
        for d in Department.objects.filter(company__name=company_name):
            for p in d.person_department_key.all(): # You also apply some filter()
                l.append(p) # Remember This will append object  not  string or dictionary
        return l
    

    别忘了相关名称必须是唯一的

    首先,您必须将外键绑定到您的公司或部门

    class Department(models.Model):
        name = models.CharField(max_length=10)
        company = models.ForeignKeyField(to=Company, related_name="department_company_key")
    
    class Person(models.Model):
        name = models.CharField(max_length=10)
        person_department = models.ForeignKey(
            'Department',
            related_name="person_department_key"
            on_delete=models.CASCADE,
            blank=False,
            null=False
        )
    
    然后在您的函数中:

    def persons_by_company(company_name):
        l = []
        for d in Department.objects.filter(company__name=company_name):
            for p in d.person_department_key.all(): # You also apply some filter()
                l.append(p) # Remember This will append object  not  string or dictionary
        return l
    

    别忘了相关名称必须是唯一的

    在我的例子中,我认为只需

    Person.objects.filter(departement__company__id=company_id).distinct()
    
    或使用公司名称:

    Person.objects.filter(departement__company__name__iexact=company_name).distinct()
    
    你的职能是:

    def persons_by_company(company_name):
        return Person.objects.filter(departement__company__name__iexact=company_name).distinct()
    def persons_by_company(公司名称):
    返回Person.objects.filter(部门\公司\名称\ iexact=公司\名称)。distinct()
    它返回一个查询集,速度更快。我使用
    iexact
    避免区分大小写

    更新:
    .distinct()
    只是为了删除重复的条目。

    在我的例子中,我认为只需

    Person.objects.filter(departement__company__id=company_id).distinct()
    
    或使用公司名称:

    Person.objects.filter(departement__company__name__iexact=company_name).distinct()
    
    你的职能是:

    def persons_by_company(company_name):
        return Person.objects.filter(departement__company__name__iexact=company_name).distinct()
    def persons_by_company(公司名称):
    返回Person.objects.filter(部门\公司\名称\ iexact=公司\名称)。distinct()
    它返回一个查询集,速度更快。我使用
    iexact
    避免区分大小写

    更新:
    .distinct()
    只是为了删除重复条目。

    这个
    Person.objects.filter(部门公司id=company公司id)
    ?这个
    Person.objects.filter(部门公司id=company公司id)
    怎么样?我认为它不起作用-部门是一个多对多的领域(一个人可以有多个DepartmentsRect,但您使用department只是为了查找公司,它只会列出与给定公司名称链接的所有人员条目。您测试了吗?您是对的,在我的情况下,部门有更多约束,那么我是否使用Q查询?例如,我想从
    department.objects.filter获取它(name\uu icontains=“A”)
    是的,您可以使用它来查找不同的字段幸运的是,此解决方案不起作用-如果此人在公司的两个部门,它会返回两次我认为不起作用-部门是一个多对多字段(一个人可以有多个DepartmentsRect,但您使用department只是为了查找公司,它只会列出与给定公司名称链接的所有人员条目。您测试了吗?您是对的,在我的情况下,部门有更多约束,那么我是否使用Q查询?例如,我想从
    department.objects.filter获取它(name\uu icontains=“A”)
    是的,您可以使用它来查找不同的字段幸运的是,此解决方案不起作用-如果此人在公司的两个部门,它会返回两次(我的真实模型要复杂得多,这只是一个最小的示例)。我无法更改模型-尤其是您的模型在技术上有所不同-它有N对1的人际关系,我的模型有M对N的关系。在您的模型中,一个人ccacn有多个部门?(我的真实模型要复杂得多,这只是一个最小的示例).我无法更改模型-尤其是您的模型在技术上有所不同-它有N对1的人际关系,我的模型有M对N的关系在您的模型中一个人ccacn有多个部门吗?