django,将多个表(模型)存储在筛选器中

django,将多个表(模型)存储在筛选器中,django,Django,我有一个功能正常的搜索功能如下所示,它的工作没有问题。我们正在重新设计系统,面积值现在位于其自己的表(模型)中。要到达东部地区,路线如下:Trench.Trench\u id-->Context.Context\u id-->Sample.Sample\u id(我知道这是非标准符号) 那么我将如何遍历这些连接呢?比如: qs = qs.filter(sample_id__context_id__trench_id__area_easting__icontains=easting_query)

我有一个功能正常的搜索功能如下所示,它的工作没有问题。我们正在重新设计系统,面积值现在位于其自己的表(模型)中。要到达东部地区,路线如下:Trench.Trench\u id-->Context.Context\u id-->Sample.Sample\u id(我知道这是非标准符号)

那么我将如何遍历这些连接呢?比如:

qs = qs.filter(sample_id__context_id__trench_id__area_easting__icontains=easting_query)
它为不允许的自动字段或字段上的联接返回
不支持的查找“context\u id”。

from excavation.models import Trench, Context, Sample
from ceramic.models import Ceramic
...

def CeramicFliterView(request):
    qs = Sample.objects.all()
    easting_query = request.GET.get('area_easting')

    if easting_query != '' and easting_query is not None:
        qs = qs.filter(area_easting__icontains=easting_query)
    ...
Models.py

class Trench(models.Model):
    trench_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=500, default='', blank=True, null=True)
    area_easting = models.IntegerField()
    area_northing = models.IntegerField()
...

class Context(models.Model):
    context_id = models.AutoField(primary_key=True)
    trench_id = models.ForeignKey(Trench, db_column='trench_id', on_delete = models.PROTECT)
...

class Sample(models.Model):
    sample_id = models.AutoField(primary_key=True)
    context_id = models.ForeignKey(Context, db_column='context_id', on_delete = models.PROTECT)
...

class Ceramic(models.Model):
    ceramic_id = models.AutoField(primary_key=True)
    sample_id = models.ForeignKey(Sample, db_column='sample_id', on_delete = models.PROTECT)

示例id和您提到的其他id字段-它们是外键,对吗?正确,我将添加一个models.py摘要以使其更清晰我认为您应该删除
\u id
后缀
qs=qs.filter(示例\u上下文\u沟槽\u区域\u东汀\u icontains=东汀查询)
后缀\u id是列名的一部分,我知道这不是我说过的Django方式。在.hm上面添加的模型,
qs
已经是一个
示例
模型,所以首先尝试将查询更改为
qs.filter(context\u id\u id\u area\u easting\u icontains=easting\u query)
同样,在使用Django时,这也是一种糟糕的模式设计。