Queryset只允许我在联接中仅选择一个表字段

时间:2019-06-04 13:57:21

标签: django python-3.x django-queryset

我有两个表,但是我只是想从dNm表中获取T(在连接时),但是我只能从TSF中提取字段。

我有模型文件: models.py

class T(models.Model): 
    emailVerified = models.EmailField(max_length=50) 
    dNm = models.CharField(max_length=40,unique=True)
    FKToUser = models.ForeignKey('auth.user', default=None, on_delete=models.PROTECT)  

class TSF(models.Model):
    httpResponse = models.IntegerField(validators=[MaxValueValidator(3)])
    FKToT = models.ForeignKey('T', on_delete=models.PROTECT)

在常规(伪)sql中,我正在尝试执行以下操作:

SELECT dNm
FROM T, TSF
WHERE T.id=TSF.FKToT
AND T.FKToUser=<<THE CURRENTLY SIGNED IN USER>>

但是,它仅允许我在伪sql中执行以下操作:

SELECT <any field from TSF>
FROM T, TSF
WHERE T.id=TSF.FKToT
AND T.FKToUser=<<THE CURRENTLY SIGNED IN USER>>

我的views.py:

def viewed(request):
    AUS = TSF.objects.filter(FKToTld__FKToUser=request.user).values('dNm')
    return render(request, 'file.html', {
         'ATFS':ATFSs
    })

输出模板

{{ t.dNm }}

更新现在这不是在页面上引发错误,而是发送了很多空白。

我在这里做什么错了?

2 个答案:

答案 0 :(得分:0)

values()返回字典查询集。您可以检查here以获得更多信息。

您可以执行以下操作:

views.py

AUS = TSF.objects.filter(FKToTld__FKToUser=request.user).values('FKToTld__dNm').disctinct()

template.html

{% for key, value in ATFS.items %}
    {{ key }}: {{ value }}
{% endfor %}

答案 1 :(得分:0)

使用 values('FKToTld__dNm') 代替 values('dNm')

def viewed(request):
    AUS = TSF.objects.filter(FKToTld__FKToUser=request.user).values('FKToTld__dNm').order_by('FKToTld__dNm').distinct()
    return render(request, 'file.html', {
         'ATFS':ATFSs
    })

以及您模板中的

{% for instance in ATFS %}
    {{ instance.FKToTld__dNm }}
{% endfor %}