Chr*_*ris 8 django django-templates django-models django-views
模型:
class Subjects (models.Model):
name = models.CharField(max_length=100)
places = models.CharField(max_length=100)
class Student (models.Model):
name = models.CharField(max_length=40)
lastname = models.CharField(max_length=80)
subjects = models.ManyToManyField(Subjects, blank=True)
Run Code Online (Sandbox Code Playgroud)
当我使用上面的模型时,Django创建了appname_student_subjects.
appname_student_subjects表例如,如下所示:
id | student_id | subjects_id
-----------------------------------------
1 | 1 | 10
2 | 4 | 11
3 | 4 | 19
4 | 5 | 10
...
~1000
Run Code Online (Sandbox Code Playgroud)
如何访问subjects_id字段并计算上表中subject_id存在的次数(然后使用它执行某些操作).例如:如果id为10的主题存在两次模板显示2.我知道我应该使用"len"结果,但我不知道如何访问subject_id字段.使用外键我在for循环中这样做:
results_all = Students.objects.filter(subject_id='10')
result = len(results_all)
Run Code Online (Sandbox Code Playgroud)
然后我将结果传递给模板并在for循环中显示它,但它不是外键,所以它不起作用.
Yuj*_*ita 17
您可以直接访问直通表.
num = (Students.subjects # M2M Manager
.through # subjects_students through table
.objects # through table manager
.filter(student_id=10) # your query against through table
.count())
Run Code Online (Sandbox Code Playgroud)