我尝试使用其他表的 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} 使用其他表的列。
TestResult
有一个 ForeignKey
名为 test_id
,所以:
print(Classes.objects.values('name', 'students__testresults__test_id__name'))