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里面看到Organisation
和Employee
没有关系,那你怎么用organisation__employee...
得到结果呢?
您应该首先创建一个 ForeignKey
字段与 Employee
模型关联,然后您的代码才能正常工作。
我正在尝试获取一个查询集,但它没有显示任何内容。基本上,我想获取通过外键分配给员工的资产对象,这是登录用户的外键。
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里面看到Organisation
和Employee
没有关系,那你怎么用organisation__employee...
得到结果呢?
您应该首先创建一个 ForeignKey
字段与 Employee
模型关联,然后您的代码才能正常工作。