Я пытаюсь отфильтровать таблицу по значению в другой таблице через внешний ключ.
trench_id = models.ForeignKey(Trench, db_column='trench_id', on_delete = models.PROTECT)
Как и выше, модель контекста присоединяется к модели Trench через trench_id__trench_id. Я хочу получить доступ к trench.name, как вы можете видеть ниже. Затем я использую это значение в фильтре. , Я включил код views.py и для справки мой models.py.
def allcontexts(request):
allcontexts = Context.objects.filter(trench_id__trench_id__name=request.session.get("name"))
return render(request, 'context_manager/context_manager.html',
{
'allcontexts':allcontexts,
})
Я получаю следующую ошибку Unsupported lookup 'name' for AutoField or join on the field not permitted.
models.py
class Trench(models.Model):
trench_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
area_easting = models.IntegerField()
area_northing = models.IntegerField()
def __str__(self):
return str(self.name)
class Context(models.Model):
context_id = models.AutoField(primary_key=True)
trench_id = models.ForeignKey(Trench, db_column='trench_id', on_delete = models.PROTECT)
number = models.IntegerField()
type = models.CharField(max_length = 50, blank=True, null=True)
description = models.TextField(blank=True, null=True)
excavation_method = models.CharField(max_length = 50, blank=True, null=True)
open_date = models.DateField(blank=True, null=True)
close_date = models.DateField(blank=True, null=True)
excavated_by = models.CharField(max_length = 50, blank=True, null=True)
area_easting = models.IntegerField()
def __str__(self):
return str(self.number)
Дополнительное устранение неполадок
Вот генерируемый sql, который не отображается в таблице траншей.
queryset = Context.objects.filter(trench_id__trench_id=4)
print(queryset.query)
SELECT "kap"."context"."context_id", "kap"."context"."trench_id", "kap"."context"."number", "kap"."context"."type", "kap"."context"."description", "kap"."context"."excavation_method", "kap"."context"."open_date", "kap"."context"."close_date", "kap"."context"."excavated_by", "kap"."context"."area_easting"
FROM "kap"."context"
WHERE "kap"."context"."trench_id" = 4 ORDER BY "kap"."context"."number" ASC