Ich habe ein Modell, Course, das das Gruppenmodell unterklassifiziert. Wie kann ich ähnlich wie alle seine Gruppen auf Benutzerkurse zugreifen (z. B. request.user.courses
)?Wie auf Gruppenunterklasse von Benutzer zugreifen?
1
A
Antwort
0
Versuchen
qs = request.user.groups.filter(course__isnull=False)
for group in qs:
course = group.course
# or shortcuts
User.get_courses = lambda self: map(lambda g: g.course, self.groups.filter(course__isnull=False))
# or
User.get_courses = lambda self: Course.objects.filter(pk__in=self.groups.all())
# then
request.user.get_courses()
Es gibt keine direkte Beziehung zwischen User und Course. Sie müssen Gruppen abrufen und dann Kurse abrufen, indem Sie OneToOneField, das durch Modellvererbung generiert wird, zwischen Group
und Course
verfolgen.
Nicht sicher, warum Sie die Unterklasse Group
. Sie könnten auch
class Course(models.Model):
students = models.ManyToManyField(User, related_name='courses')
Wenn Sie wirklich wollen User
erweitern User.courses
wie User.groups
haben, könnten Sie
# Option 1
# in models.py
class UserCourse(models.Model):
user = models.ForeignKey(User)
course = models.ForeignKey(Course, db_column='group_id')
class Meta:
db_table = User.groups.through._meta.db_table
m2m = models.ManyToManyField(Course, related_name='students', through=UserCourse)
m2m.contribute_to_class(User, 'courses')
# Option 2
# simpler but has duplicated m2m table and different API
# Also a Course instance will not have corresponding
# Group instance in user.groups, which may not be correct in logic.
class UserCourse(models.Model):
user = models.ForeignKey(User, related_name='courses')
course = models.ForeignKey(Course)
# Option 3
# just as Option 2, but w/ M2M API
class UserCourse(models.Model):
user = models.ForeignKey(User)
course = models.ForeignKey(Course)
m2m = models.ManyToManyField(Course, related_name='students', through=UserCourse)
m2m.contribute_to_class(User, 'courses')
Verwandte Themen
- 1. eingeloggte Benutzer können auf Daten anderer Benutzer zugreifen
- 2. Programmgesteuert auf alle Benutzer zugreifen Startmenü
- 3. kann nicht auf/dev/sda3 von Nicht-Root-Benutzer zugreifen
- 4. Kann ein Benutzer auf Daten von einem context_dict zugreifen?
- 5. Wie können Benutzer über ".htaccess" auf einen Ordner zugreifen?
- 6. Wie kann ich auf Daten anderer Benutzer zugreifen?
- 7. Kann JRI auf Benutzer-installierte Pakete auf Vista zugreifen?
- 8. Wie auf Strukturelement zugreifen?
- 9. Wie auf XML-Datei zugreifen?
- 10. Kann nicht auf benutzerdefinierte Eigenschaften auf geschachtelten Benutzer-Steuerelement zugreifen
- 11. Wie auf bestimmte Objektfelder zugreifen?
- 12. Auf den Pfad des Anwendungsdatenordners für alle Windows-Benutzer zugreifen
- 13. symfony2: wie auf Service von Vorlage zugreifen
- 14. ASP.NET: Wie auf Sitzung von Handler zugreifen?
- 15. Mobile Benutzer nicht auf Facebook-App zugreifen können
- 16. Zugreifen auf Array von Strings
- 17. Ermitteln, ob Benutzer auf die angeforderte Seite zugreifen kann?
- 18. Verhindern, dass Benutzer auf jedes wsdl-Element zugreifen
- 19. Wie auf Facebook Benutzer-ID von Javascript innerhalb eines fb: iframe zugreifen?
- 20. Wie auf den Benutzer von der Anfrage in der Express-Methode zugreifen
- 21. Zugreifen auf ViewContext von Klassenbibliothek
- 22. So verhindern Sie, dass Benutzer auf die Admin-Seite zugreifen
- 23. wie auf Listenobjekt Methoden zugreifen?
- 24. Wie kann ich auf neo4j-Ergebniseigenschaften zugreifen?
- 25. ASP.NET AJAX: Wie auf Objekteigenschaften zugreifen?
- 26. Zugreifen auf Benutzerprofilbild von iCloud-Konto
- 27. Wie auf eine Referenzanwendung zugreifen
- 28. wie man Videos auf unserer Website hinzufügt, auf die nur bestimmte Benutzer zugreifen können
- 29. Symfony2: Wie umleiten auf einer bestimmten Seite, wenn Benutzer nicht auf ein URL-Muster zugreifen kann
- 30. Wie auf ein Textfeld in Form3 von Form1 zugreifen?