Model:Django korzystające surowy wiele do wielu utworzonych pól tabeli
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)
Django tworzy appname_student_subjects kiedy używam modelu powyżej.
appname_student_subjects tabela wygląda na przykład tak:
id | student_id | subjects_id
-----------------------------------------
1 | 1 | 10
2 | 4 | 11
3 | 4 | 19
4 | 5 | 10
...
~1000
Jak mogę uzyskać dostęp do pola subjects_id i policzyć, ile razy występuje subjects_id w tabeli powyżej (i wtedy coś z tym zrobić). Na przykład: Jeśli obiekt o identyfikatorze 10 istnieje dwukrotnie, to szablon wyświetla komunikat 2. Wiem, że powinienem użyć "len" z wynikiem, ale nie wiem, jak uzyskać dostęp do pola subject_id. Z kluczy obcych robię to tak w pętli for:
results_all = Students.objects.filter(subject_id='10')
result = len(results_all)
i przekazać wynik do szablonu i wyświetli go w pętli for, ale nie jest to klucz obcy, tak to nie działa.
Oto uwaga na temat drobnego szczegółu, który pewnego dnia może pewnego dnia zapamiętać innego czytelnika: 'Students.subjects.through' działa, ale' Subjects.student_set.through' nie działa. Jest to całkowicie zrozumiałe z punktu widzenia projektowania, ale w rzeczywistości ludzie zapominają, który z nich jest związany w pierwszej kolejności, i nie mają pojęcia, co mówi komunikat o błędzie. – AlanSE