首页 > 解决方案 > 跨越多个关系的 Django 数据库查询

问题描述

鉴于以下模型:

class Assets(models.Model):
    assettag = models.CharField()
    ...
    pass

class Employees(models.Model):
    loginname = models.CharField()
    pass

class Item(models.Model):
    descr = models.CharField()
    asset = models.OneToOneField('Assets')
    ...

class Assignments(models.Model):
    employeeid = models.ForeignKey('Employees')
    assetid = models.ForeignKey('Assets')
    ...

我可以使用 Q 对象进行查询,返回Item包含某个descr或某个的所有模型。assettag

Item.objects.filter(Q(asset__assettag__icontains = query) |
                    Q(descr__icontains = query) #|
                    ).order_by('asset__assettag')

是否有可能以employeeid__loginname某种方式包括在内?我想不出办法。

我想检索表Assets中引用Item且属于某个Employee.

标签: djangopython-3.xdjango-modelsdjango-views

解决方案


首先在 Assignments 模型中添加一个“related_name”。

assetid = models.ForeignKey(Assets, related_name='asset_related_name')

那么你可以使用这个asset__asset_related_name__employeeid__loginname


推荐阅读