Django Queryset外键

时间:2015-08-18 08:55:44

标签: python django django-models django-queryset

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

组织内没有employee字段。这是一个相反的关系,附加了许多员工,所以你不能这样查询。

但是在django外键中有一些名为related_name的东西,使用它,你的查询应该是这样的:

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

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

clientID = models.ForeignKey(Organisation, related_name="employees")

它看起来像这样:

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

答案 2 :(得分:-1)

你写错了代码。您希望使用Asset对象:

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

但是你明显可以在models.py中看到OrganisationEmployee之间没有关系,那么如何使用organisation__employee...获得结果?

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