Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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 Queryset外键_Python_Django_Django Models_Django Queryset - Fatal编程技术网

Python Django Queryset外键

Python Django Queryset外键,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,我正在尝试获取查询集,但它没有显示任何内容。基本上,我希望获得通过外键分配给员工的资产对象,这是已登录用户的外键 视图.py def get_queryset(self): assetlist = Asset.objects.filter(organisation__employee__user=self.request.user) print(assetlist) return assetlist class Employee(models.M

我正在尝试获取查询集,但它没有显示任何内容。基本上,我希望获得通过外键分配给员工的资产对象,这是已登录用户的外键

视图.py

def get_queryset(self):
        assetlist = Asset.objects.filter(organisation__employee__user=self.request.user)
        print(assetlist)
        return assetlist
class Employee(models.Model):
    name = models.CharField("Employee Name", max_length=50, blank=False)
    email = models.CharField("Employee Email", max_length=50, blank=True)
    user = models.ForeignKey(User)
    clientID = models.ForeignKey(Organisation)

    def save(self):
        self.name = self.user.get_full_name()
        self.email = self.user.email
        super(Employee, self).save()

    def __str__(self):
        return self.name


class Asset(models.Model):
    name = models.CharField("Asset Name", max_length=30, primary_key=True)
    organisation = models.ForeignKey(Organisation)

    def __str__(self):
        return self.name


class Organisation(models.Model):
    name = models.CharField("Organisation Name", max_length=50, blank=False)
    location = models.TextField("Organisation Address", max_length=200, blank=True)
    tel = models.CharField("Telephone Number", max_length=20)

    def __str__(self):
        return self.name
型号.py

def get_queryset(self):
        assetlist = Asset.objects.filter(organisation__employee__user=self.request.user)
        print(assetlist)
        return assetlist
class Employee(models.Model):
    name = models.CharField("Employee Name", max_length=50, blank=False)
    email = models.CharField("Employee Email", max_length=50, blank=True)
    user = models.ForeignKey(User)
    clientID = models.ForeignKey(Organisation)

    def save(self):
        self.name = self.user.get_full_name()
        self.email = self.user.email
        super(Employee, self).save()

    def __str__(self):
        return self.name


class Asset(models.Model):
    name = models.CharField("Asset Name", max_length=30, primary_key=True)
    organisation = models.ForeignKey(Organisation)

    def __str__(self):
        return self.name


class Organisation(models.Model):
    name = models.CharField("Organisation Name", max_length=50, blank=False)
    location = models.TextField("Organisation Address", max_length=200, blank=True)
    tel = models.CharField("Telephone Number", max_length=20)

    def __str__(self):
        return self.name

组织内部没有
employee
字段。这是一个反向关系,有很多员工,所以你不能这样查询

但是在django外键中有一个叫做
related\u name
的东西,使用它,您的查询应该如下所示:

    assetlist = Asset.objects.filter(organisation__employee_set__user=self.request.user)
或者,如果您在员工->组织关系中指定自己的相关名称:

clientID = models.ForeignKey(Organisation, related_name="employees")
它将如下所示:

    assetlist = Asset.objects.filter(organisation__employees__user=self.request.user)

答案是从另一个模型接近,如下所示:

assetlist = Sensor.objects.filter(asset__organisation__employee__user=self.request.user)

您编写了错误的代码。您需要使用以下方法创建
资产
对象:

assetlist = Asset.objects.filter(organisation__employee__user=self.request.user)
但是您可以在models.py中清楚地看到
组织
员工
之间没有关系,那么如何使用
组织u员工…
获得结果呢


您应该首先创建一个
ForeignKey
字段来与
员工
模型关联,然后您的代码就会正常工作。

与下面两个答案相反,这是这些模型的正确查询。当你尝试这个时会发生什么?如果您在控制台中根本没有得到任何输出,这意味着您的
get\u queryset
方法没有被调用。你应该发布整个视图。使用
get\u queryset
让我想到了。你在用它们吗?如果是这样,您可以粘贴更多的代码吗?ForeignKey已经存在:
clientID=models.ForeignKey(组织)
,但这是员工与组织之间的关系…在“组织”模型中没有任何字段与员工模型相关…如Employee=models.ForeignKey(员工)这是一个反向关系查找:(在示例中,请注意,
Blog
没有
entry
外键,但查询仍然有效。)