我已经详细阅读了django queries。
但是,尽管我努力尝试使用Django forward
queries和backwards
queries,但我还是无法得到想要的东西。
我写了一个前向查询:
ATUFS = TSFH.objects.filter(FKToUser=request.user).values('sB','sE')
这将返回:
{'sB': datetime.datetime(2019, 5, 21, 18, 14, 2, 691185, tzinfo=<UTC>), 'sE': datetime.datetime(2019, 5, 21, 18, 16, 2, 532731, tzinfo=<UTC>)}
但是对于该查询,我还需要进行查询,以确保TSF.FKToT
到另一个表T
的FK与我的脚本ed = request.GET.get('d', '')
中的局部变量匹配。因此,从本质上来讲,我试图通过实现T.dNm = ed
来实现此目的。我只是在django转发查询中困惑如何实现这一目标。
我写了一个向后查询:
ATFUS = TSF.objects.filter(FKToTld__dNm='123.123.13.1').values('sB','sE
')
这将返回错误,表明sB
和sE
不能返回其值,因为它们不在TSF
表中。
在常规SQL
中,我只是试图实现
SELECT sB, sE
FROM TSF, TSFH,T
where TSFH.id=TSF.FKToTSFH_id and T.id=tsf.FKToT_id;
如何通过Django orm
完成我想做的事情?
谢谢
更新后的视图/模板
Completed=TSF.objects.filter(FKToT__FKToUser=request.user,FKToTSFH__sE__isnull=False).values('FKToTSFH__sB','FKToTSFH__sE')
return render(request, 'view.html', {
'C':Completed
})
{% if C %}
{% for res in C %}
<li><span>{{ res.FKToTSFH.sB }}</span></li>
{% endfor %}
这会产生空白输出的问题。
关于如何解决的任何想法。
答案 0 :(得分:1)
您可以这样尝试(因为sB
和sE
处于TSFH
模型中,因此您需要将FKToTSFH__
放在sB
和{{1 }},如下所示:
sE
获得此结果的更复杂的方法是将TSF.objects.filter(FKToTld__dNm='123.123.13.1').values('FKToTSFH__sB','FKToTSFH__sE')
# with user
TSF.objects.filter(FKToTld__FKToUser=request.user).values('FKToTSFH__sB','FKToTSFH__sE') # make sure user is authenticated
和sE
的值注释到查询集,如下所示:
sB
from django.db.models import F
TSF.objects.filter(FKToTld__dNm='123.123.13.1').annotate(sB=F('TSFH__sB'), sE=F('FKToTSFH__sE')).values('sB','sE')
您可以使用isnull
检查是否存在空值:
for item in TSF.objects.filter(FKToTld__dNm='123.123.13.1'):
print(item.FKToTSFH.sB)
print(item.FKToTSFH.sE)
for item in TSF.objects.filter(FKToTld__dNm='123.123.13.1').values('FKToTSFH__sB', 'FKToTSFH__sE'):
print(item.get('FKToTSFH__sB'))
print(item.get('FKToTSFH__sE'))
for (sB, sE) in TSF.objects.filter(FKToTld__dNm='123.123.13.1').values_list('FKToTSFH__sB', 'FKToTSFH__sE'):
print(sB)
print(sE)