У меня есть функция поиска, показанная ниже, она работает без проблем. Мы переделываем систему, значение 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)