Falc410
Vice Admiral
- Registriert
- Juni 2006
- Beiträge
- 6.723
Ich habe ein Model welches ich in Django abbilden möchte, aber da kommt es teilweise zu Circular Import und ich meine, dass mein Model einfach nicht gut ist.
Ich beschreibe es erst einmal in Prosa:
- Es gibt mehrere Institute
- Es gibt mehrere User
- Jeder User ist Mitglied (Member) von genau einem Institut sein
- Jedes Institut hat genau einen MasterUser
Was ist nun die beste Lösung um das in der Datenbank und in Django abzubilden. Es gibt ja mehrere Möglichkeiten. MasterUser als Boolean oder als ForeignKey. Die Member-Beziehung über eine eigene Klasse (Table) oder auch als ForeignKey.
Initial hatte ich folgendes (in einer App mit dem Name play):
Und dann noch eine Klasse für Institut (in einer anderen App mit dem Namen portal)
Es funktioniert zwar, aber ich bin nicht besonders glücklich da ich das Gefühl habe, dass es keine schöne Lösung ist.
Wenn ich ein Institut erstellen möchte, muss ja schon ein User existieren, daher habe ich beim User das Institut auf null=True gelassen, ansonsten könnte ich keinen User erstellen. Henne - Ei Problem.
Ich beschreibe es erst einmal in Prosa:
- Es gibt mehrere Institute
- Es gibt mehrere User
- Jeder User ist Mitglied (Member) von genau einem Institut sein
- Jedes Institut hat genau einen MasterUser
Was ist nun die beste Lösung um das in der Datenbank und in Django abzubilden. Es gibt ja mehrere Möglichkeiten. MasterUser als Boolean oder als ForeignKey. Die Member-Beziehung über eine eigene Klasse (Table) oder auch als ForeignKey.
Initial hatte ich folgendes (in einer App mit dem Name play):
Code:
class User(AbstractBaseUser, PermissionsMixin):
# account-related information
institute = models.ForeignKey(Institute, blank=True, null=True, on_delete=models.SET(get_default_institute))
username = ...
....
Code:
class Institute(models.Model):
master_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='master_user')
name = models.CharField(max_length=255)
def members(self):
UserModel = apps.get_model('play', 'User') # need to avoid circular import
return UserModel.objects.filter(institute=self)
Es funktioniert zwar, aber ich bin nicht besonders glücklich da ich das Gefühl habe, dass es keine schöne Lösung ist.
Wenn ich ein Institut erstellen möchte, muss ja schon ein User existieren, daher habe ich beim User das Institut auf null=True gelassen, ansonsten könnte ich keinen User erstellen. Henne - Ei Problem.