Django中如何使用其他表的colmun进行分组

问题描述 投票:0回答:1

我尝试使用其他表的 colmun 来对数据进行分组。

print(Classes.objects.values('name', 'students__testresults__tests__name'))

然后我收到以下错误。

Traceback (most recent call last):
  File "...Framework_practice\django\model\ModelExam\model_exam.py", line 50, in <module>
    print(Classes.objects.values('name', 'students__testresults__tests__name'))
  File ...Framework_practice\venv\lib\site-packages\django\db\models\manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "...Framework_practice\venv\lib\site-packages\django\db\models\query.py", line 1360, in values
    clone = self._values(*fields, **expressions)
  File "...\Framework_practice\venv\lib\site-packages\django\db\models\query.py", line 1355, in _values
    clone.query.set_values(fields)
  File "...Framework_practice\venv\lib\site-packages\django\db\models\sql\query.py", line 2502, in set_values
    self.add_fields(field_names, True)
  File "...Framework_practice\venv\lib\site-packages\django\db\models\sql\query.py", line 2208, in add_fields
    cols.append(join_info.transform_function(target, final_alias))
  File "...Framework_practice\venv\lib\site-packages\django\db\models\sql\query.py", line 1889, in transform
    wrapped = previous(field, alias)
  File "...\Framework_practice\venv\lib\site-packages\django\db\models\sql\query.py", line 1890, in transform
    return self.try_transform(wrapped, name)
  File "...Framework_practice\venv\lib\site-packages\django\db\models\sql\query.py", line 1427, in try_transform
    raise FieldError(
django.core.exceptions.FieldError: Unsupported lookup 'tests' for BigAutoField or join on the field not permitted.

Process finished with exit code 1

models.py 如下

from django.db import models


# Create your models here.
class Tests(models.Model):
    name = models.CharField(max_length=50)
    class Meta:
        db_table='tests'


class TestResults(models.Model):
    student_id = models.ForeignKey(
        'Students', on_delete=models.CASCADE
    )
    test_id = models.ForeignKey(
        'Tests', on_delete=models.CASCADE
    )
    score = models.IntegerField()
    class Meta:
        db_table='testreults'


class Students(models.Model):
    class_id = models.ForeignKey(
        'Classes', on_delete=models.CASCADE
    )
    name = models.CharField(max_length=50)
    grade = models.IntegerField()
    class Meta:
        db_table='students'


class Classes(models.Model):
    name = models.CharField(max_length=50)
    class Meta:
        db_table='classes'
asgiref==3.8.1
Django==5.0.4
pytz==2024.1
sqlparse==0.4.4
typing_extensions==4.11.0
tzdata==2024.1

这是环境。

抱歉,如果这个问题在其他地方得到了回答,我已经看过了,但真诚地找不到它。

print(Classes.objects.values('name', 'students__testresults__score'))
该代码与错误代码位于同一文件中。 因此我想我可以通过 {table name}__{colmun name} 使用其他表的列。

python django-models
1个回答
0
投票

TestResult
有一个
ForeignKey
名为
test_id
,所以:

print(Classes.objects.values('name', 'students__testresults__test_id__name'))
© www.soinside.com 2019 - 2024. All rights reserved.