filter Verschachtelung für undefinierte Klassen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

Hallo

ich habe eine Methode:

Code: Alles auswählen

def Methode(self, klasse):
   spieler = ...
   groups = ...
   objekte = klasse.objects.filter(spieler_id=spieler.pk).filter(gruppen__in=groups)
in der möchte ich folgende filter Anwendung machen (spieler and (gruppe1 or gruppe2 or gruppe3...))
gruppen ist ein many to many field
groups ist eine liste von gruppen

1. ist die filter abfrage so korrekt?
2. ich möchte an die Methode verschiedene Klassen übergeben, jetzt könnte es aber sein das eine Klasse kein Attribute gruppen besitzt. Was dann?
3. was ist wenn gruppen nicht gesetzt sind und/oder groups = [] ist?
Zuletzt geändert von Metatron am Dienstag 11. Januar 2022, 12:59, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Argumente, die man an eine Funktion übergibt, müssen die selbe (Teil-)Schnittstelle haben, wenn Deine Klasse kein Attribut "gruppen" hat, dann kannst Du sie nicht in dieser Weise benutzen.
Warum gibt es überhaupt mehrere Entitäten, die die selben Relation haben?
Wie sieht Dein Datenbankdesign aus? Ich habe den Verdacht, dass dort der das eigentliche Problem liegt.

Punkt 3 verstehe ich nicht, weil "gruppen" existiert immer, auch wenn die Menge leer ist.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

Es handelt sich um ein Berechtigungssystem. In der Methode wird geprüft was man wie darf.
Ich möchte hier verschiedene Klassen übergeben und einige haben eine Gruppe und andere nicht. Nun wird in der Methode jedoch noch mehr geprüft als nur die Gruppe.
Also müsste ich vor den filtern fragen ob es das attribut gibt in der Klasse, oder?

Code: Alles auswählen

if not hasattr(klasse, "gruppe"):
wie ist es wenn die gruppen = none sind, sprich noch keine in der Datenbank gesetzt?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum sollte ein Berechtigungssystem verschiedene Klassen (sprich Datenbanktabellen) brauchen. Dort liegt Dein Fehler. Und solange Du nicht beschreibst, warum Du denn das glaubst zu brauchen, können wir Dir hier auch nicht weiterhelfen.
Metatron
User
Beiträge: 42
Registriert: Donnerstag 10. Mai 2018, 08:35

vereinfacht:
Ich habe verschiedene Klassen A, B, C...
Ich habe eine Spieler und ich habe eine Klasse Berechtigung.
In der Klasse Berechtigung steht drin, welcher spieler auf welches Attribut welcher Klasse was machen darf (Schreiben, Lesen...)
In der Klasse Berechtigung gibt es eine Methode an der ich die Form (der Klassen A, B, C...) übergebe und diese angepasst werden.
Jedesmal wenn ich jetzt irgendwo im code von irgendwelcher klasse was darstellen möchte, möchte ich diese Methode aufrufen.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist mir zu abstrakt, dass ich verstehen würde, was konkret gebraucht wird. Was sind diese verschiedenen Klassen A, B und C?
Und was meinst Du mit "anpassen einer Form (Klasse)"?
Antworten