使用Q来获取不等于的报告

时间:2017-11-09 17:44:04

标签: django django-views

我正处于观看的最后一步,我可以使用QVReportList.objects.all()返回所有报告,它会在我的模板中正确显示报告ID。

但是,我想使用Q只显示我的reportdetail中不存在的报告,如下所示:

def profile(request):
    owner = User.objects.get (formattedusername=request.user.formattedusername)
    reportdetail = QVReportAccess.objects.filter(ntname = owner.formattedusername).values('report_id','report_name','report_access')
    reportlist = QvReportList.objects.filter(~Q(report_id = reportdetail.report_id))
#    excludedlist = QvReportList.objects.filter(report_id = reportlist.Report_ID)

    print(reportlist)
    args = {'user':owner, 'applicationaccess':reportdetail, 'applicationlist':reportlist}#, 'excluded':excludedlist}

    return render(request, 'accounts/profile.html', args)

当我尝试运行它时,我得到一个表示report_id不存在的AttributeError,但是当我可以使用applicationaccess.report_id和applicationlist.report_id呈现它时,它会这样做:

AttributeError at /account/profile/
'QuerySet' object has no attribute 'report_id'

为什么说对象没有属性report_id?它显然存在于现有的数据库表和我的模型中。

1 个答案:

答案 0 :(得分:0)

问题不在于Q对象,但问题出在以下几行:

reportdetail = QVReportAccess.objects.filter(ntname = owner.formattedusername).values('report_id','report_name','report_access')
reportlist = QvReportList.objects.filter(~Q(report_id = reportdetail.report_id))

在第二行中,您尝试获取reportdetail.report_id但是,reportdetail是Queryset对象(dict列表),并且它没有report_id属性,即它为什么说

  

'QuerySet'对象没有属性'report_id'