在Django中针对另一个表执行查询,但未找到该表

时间:2019-06-07 13:45:39

标签: django django-queryset

我正在尝试通过join执行查询。

我的models.py看起来像:

class TSFH(models.Model):
sB = models.DateTimeField(null=True)
sE = models.DateTimeField(null=True)
FKToUser = models.ForeignKey(User,default=None, on_delete=models.PROTECT)

class Tld(models.Model):
dNm = models.CharField(verbose_name="",max_length=40,unique=True)
FKToUser = models.ForeignKey('auth.user', default=None, on_delete=models.PROTECT)

class TSF(models.Model):
FKToT = models.ForeignKey('T', on_delete=models.PROTECT)
FKToTSFH = models.ForeignKey('TSFH', on_delete=models.PROTECT, null=True, blank=True)

views.py

enteredd = request.GET.get('d', '')
query=TSFH.objects.filter(FKToT__dNm=enteredd,FKToUser=request.user,sE__isnull=False)
return render(request, 'view.html', {'q':q})

templates / file.html

{% if q %}
{% for res in q %}
<li><span>{{ res.sE }}</span></li>
{% endfor %}
{% else %}
{% endif %}

当我查看所有这些内容时,都会抱怨:

Cannot resolve keyword 'FKToT' into field

在普通的sql中,我希望通过直接从dNm进行enteredd搜索来执行以下操作,而不是如下所示的123.145.23.1的硬编码值:

SELECT sE 
FROM tsfh, tsf, t
where 
tsfh.id=tsf.FKTotsfh_id
and
t.id=tsf.FKToT_id
and
tsfh.sE is not null
and 
t.dNm='123.145.23.1';

如何将这些现有支票保留在query中,但以某种方式包括此FKToT__dNm=enteredd

非常感谢您。

2 个答案:

答案 0 :(得分:0)

在此行做一些修改:

query=TSFH.objects.filter(TST__FKToT__dNm=......)

答案 1 :(得分:0)

如果将此元数据放入类中,它将专门为表命名。

class Meta:
    db_table = '<your_table_name>'

您可以阅读更多here