Erstellte Funktion von auth/models.py in das Projektverzeichnis übernehmen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Lostinpy
User
Beiträge: 1
Registriert: Donnerstag 19. Oktober 2017, 22:30

Hallo Forum,

um einem Prüfer Wert True bei is_staff und Wert False bei is_superuser zu vergeben habe ich eine zusätliche Funktion namens "create_controller" in dem Djangoverzeichnis bzw. django.contrib.auth.models in der Classe UserManager geschrieben.
So weit so gut, alles funktioniert wie gewünscht.
Aber:
- Funktion "create_controller" soll in das projekt/models.py übernommen werden, um später von Versionskotrollsystem erkannt zu werden.

PS:
- "create_controller" Funktion wird in der fill_db.py angesprochen(siehe Ausschnitt von fill_db.py)
- Funktion "create_controller" hat return self._create_user. Funktion "_create_user" soll weiterhin in django.contrib.auth.models bleiben


Ich bin Anfänger und brauche eure Unterstüzung. Eine fertige Lösung ist nicht notwendig. Ich brauche einfach nur Tipps, um das Problem zu lösen.
Ich habe schon sehr viel mit dem import ausprobiert, leider ohne Erfolg :K

Weiss jemand was und wie ich importieren muss, wenn ich Funktion "create_controller" im Projetverzeichnis projekt/models.py haben möchte?
Und wie muss ggf. fill_db.py verändert werden?

Vielen Dank im Voraus


Auschnitt django.contrib.auth.models

Code: Alles auswählen

class UserManager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self, username, email, password, **extra_fields):
        """
        Creates and saves a User with the given username, email and password.
        """
        if not username:
            raise ValueError('The given username must be set')
        email = self.normalize_email(email)
        username = self.model.normalize_username(username)
        user = self.model(username=username, email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, username, email=None, password=None, **extra_fields):
        # heir für python-forum rausgeschnitten, um Platz zu sparen

    def create_superuser(self, username, email, password, **extra_fields):
        # heir für python-forum rausgeschnitten, um Platz zu sparen

    def create_controller(self, username, email, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', False)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('Controller must have is_staff=True.')

        return self._create_user(username, email, password, **extra_fields)

Ausschnitt fill_db.py

Code: Alles auswählen

# Create Pruefer1
pruefer1 = User.objects.create_controller(username='pruefer',
                                    first_name="vorname_pruefer1",
                                    last_name="nachname_pruefer1",
                                    password='django_test',
                                    email="test@web.de")
pruefer1.save()
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das ganze klingt ziemlich wirr, sorry...

Grundsätzlich solltest du alle Datei, die du erstelt hast, ins Projektverzeichnis bzw. das passende App-Verzeichnis legen - und nicht in eine Verzeichnis, in dem die Dateien von Django liegen.

Was in deinem Post noch fehlt, sind Angaben zun den Importen, die du machst. Nach eigenen Angaben hast du ja ein Problem mit dem import-Statement - dann solltest du das auch zeigen, was die aktuell machst. Und die Verzeichnisstruktur deines Projekts wäre auch hilfreich.

Gruß, noisefloor
Antworten