Ich versuche, alle Modelle von der models.py - Datei zu trennen. Was ich tue, wird in diesem link. Das Problem ist jedoch, dass mein einziges Modell django.contrib.auth.user ist und ich eine Funktion in models.py wie folgt schreibe, um ein Token zu generieren.

def create_user_profile(sender, instance, created, **kwargs):  
    if created:  
        UserProfile.objects.create(user=instance)  

post_save.connect(create_user_profile, sender=User)

Wie importiere ich das Ding in die _init_.py Datei, während wir das Modell als importieren?

from myapp.models.foo import Foo
4
Pawan 27 Nov. 2013 im 21:07

3 Antworten

Beste Antwort

Sie sollten nur entweder models.py oder models/__init__.py haben, und es scheint, als hätten Sie beide. Eines dieser Module wird wahrscheinlich das andere beschatten, also haben Sie nicht beide (d. H. Entfernen Sie das models.py)

1
Robert Jørgensgaard Engdahl 27 Nov. 2013 im 21:42

Wenn ich Ihrer Frage richtig folge, müssen Sie User nicht in __init__.py importieren. Sie müssen es nur in die Datei importieren, in der Sie create_user_profile deklarieren. Der Import selbst ist Standard:

from django.contrib.auth.models import User
0
Peter DeGlopper 27 Nov. 2013 im 17:25

Sie können keinen Befehl importieren, aber wenn Sie beispielsweise die darüber definierte Funktion importieren, wird sichergestellt, dass der Verbindungsaufruf ausgeführt wird. Funktionsaufrufe im Hauptteil der Datei models.py werden ebenfalls von demselben Raeson ausgeführt (d. H. Modelle werden importiert).

# p.py: 
print "hello"   # a command executed while importing anything
def x():        # a definition that can be imported
    pass

# python shell
>>> from p import x
hello
>>> 
0
maat 27 Nov. 2013 im 20:48