2013-01-13 8 views
8

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.

Odpowiedz

14

Bezpośredni dostęp do tabeli przelotowej.

+0

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

Powiązane problemy