Django 查询集外键

Django Queryset foreign keys

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

views.py

def get_queryset(self):
        assetlist = Asset.objects.filter(organisation__employee__user=self.request.user)
        print(assetlist)
        return assetlist

models.py

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_name 的东西,使用它,你的查询应该是这样的:

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

或者如果您将自己的 related_name 指定为员工 -> 组织关系:

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)

你写错了代码。您想要一个 Asset 对象,方法是:

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

但是你明明在你的models.py里面看到OrganisationEmployee没有关系,那你怎么用organisation__employee...得到结果呢?

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