Python Django Queryset外键
我正在尝试获取查询集,但它没有显示任何内容。基本上,我希望获得通过外键分配给员工的资产对象,这是已登录用户的外键 视图.pyPython 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
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
外键,但查询仍然有效。)