2017-04-11 3 views
1

Django 1,11Bezeichnung ‚Gruppe‘ ist nicht

Python 3.6.1

Für mein Projekt eingesetzt werden soll, definiert Ich werde einige Dinge vordefinieren müssen. Nämlich, ich brauche ein paar Gruppen für Benutzer.

Also, ich habe ein Verzeichnis "Bereitstellung" und legte es neben dem Projektverzeichnis.

Wenn eine neue Datenbank erstellt wird, werde ich nur ausführen:

python manage.py shell < ../deployment/initialize_project.py 

Dieser Code Werke:

from django.contrib.auth.models import Group 

Group.objects.create(name="commentator") # Can only comment. 

Group.objects.create(name="contributor") # Can add, change and delete 
             # objects. 

Dieser Code nicht:

from django.contrib.auth.models import Group 


def initialize_roles(): 

    Group.objects.create(name="commentator") # line 6 

    Group.objects.create(name="contributor") 


initialize_roles() # line 12 

Traceback:

Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line 
    utility.execute() 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/core/management/commands/shell.py", line 101, in handle 
    exec(sys.stdin.read()) 
    File "<string>", line 12, in <module> 
    File "<string>", line 6, in initialize_roles 
NameError: name 'Group' is not defined 

I markierte Linie 6 und 12 in dem obigen Code (als Inline-Kommentare).

Ich habe versucht, pdb.set_trace() zu verwenden, aber der gleiche Fehler erscheint. Als wäre pdb nicht definiert.

Ich habe auch versucht, manage.py auf initialize_project.py zu füttern, aber einfach Python manage.py Shell ausführen und den Code Zeile für Zeile einspeisen. Es hat perfekt funktioniert.

Können Sie mir einen Tritt geben?

SPÄTER

ADDED Dies funktioniert:

def initialize_roles(): 
    from django.contrib.auth.models import Group 
    Group.objects.create(name="commentator") # Can only comment. 

    Group.objects.create(name="contributor") # Can add, change and delete 
              # objects. 

initialize_roles() 
+1

In den Linien, die Sie herausgeschnitten haben, ist offensichtlich etwas los. Definieren Sie die Gruppe innerhalb dieser Funktion zufällig neu? –

+0

Keine Neudefinition innerhalb dieser Funktion. Ich würde sagen - nach besten Kräften -, dass diese Zeilen genau so sind, wie ich sie hier gebe. Ich habe sie nur kopiert. In der ganzen Datei gibt es nichts anderes als einen Kommentar für die Funktion. – Michael

+0

Interessant! Funktioniert das, wenn Sie den Code manuell in 'python manage.py shell' kopieren. Imean 'initialize_roles()' Stil, der nicht funktioniert – rrmerugu

Antwort

0

Es sei denn, es gibt mehr zu ist, was du tust, das fühlt sich an wie etwas fixtures lösen sollen. Wenn es mehr gibt, können Sie custom data migrations als Teil des anfänglichen Einrichtungsvorgangs hinzufügen. So vermeiden Sie, sich Gedanken darüber zu machen, wann Ihnen Modelle zur Verfügung stehen.

+0

Tom, die Frage ging nicht um Fixtures. Das ist ein merkwürdiges Verhalten eines Python-Programms, oder? – Michael

Verwandte Themen