django, просмотр нескольких таблиц (моделей) в фильтре - PullRequest
0 голосов
/ 23 января 2020

У меня есть функция поиска, показанная ниже, она работает без проблем. Мы переделываем систему, значение area_easting теперь находится в его собственной таблице (модели). Чтобы добраться до area_easting, его маршрут выглядит следующим образом: Trench.trench_id -> Context.context_id -> Sample.sample_id (я знаю, что это нестандартная запись).

Так как бы мне пройти через эти объединения ? Что-то вроде:

qs = qs.filter(sample_id__context_id__trench_id__area_easting__icontains=easting_query)

Что возвращает Unsupported lookup 'context_id' for AutoField or join on the field not permitted.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...