Python Datenbankmodel in Django (Python) - Circular Import umgehen

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):
Code:
class User(AbstractBaseUser, PermissionsMixin):

    # account-related information
    institute = models.ForeignKey(Institute, blank=True, null=True, on_delete=models.SET(get_default_institute))
    username = ...
    ....
Und dann noch eine Klasse für Institut (in einer anderen App mit dem Namen portal)
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.
 

Ähnliche Themen

Zurück
Oben