2015-10-16 20 views
7

Mam błąd aplikacji nie jest gotowy, gdy używam sygnału. Sądzę, że wynika to z autoryzacji użytkownika w modelu profilu, z tego, co widzę, używając Google'a, jest pewien problem z autoryzacją użytkownika.Aplikacje nie zostały jeszcze załadowane. z sygnałami

myślę, że błąd jest tutaj:

class Profile_User(models.Model): 
    user = models.OneToOneField(User, null=True) 

ale nie mam pojęcia, jak go rozwiązać.

model z sygnałem:

from django.db import models 
from Modif_Box.models import Modif_Box_User 
from Profile.models import Profile_User 
from Post.models import Post_User 
from django.utils import timezone 
#from Modif_Box.get_models import get_modif_box_profile 




# Create your models here. 
class Box_Post_User(models.Model): 
    receiver = models.OneToOneField("Profile.Profile_User",related_name="receiver_post_box",blank=True,null=True) 
    post = models.ManyToManyField("Post.Post_User",blank=True,related_name="post_in_box_user") 
    modif_box = models.ForeignKey("Modif_Box.Modif_Box_User",blank=True,null=True) 
    last_viewed = models.IntegerField(blank=True,null=True) 
    date = models.DateTimeField(default=timezone.now, blank=True) 
    date_sys_added = models.DateTimeField(default=timezone.now, blank=True) 
    def __str__(self) : 
     try : 
      return "%s : %s : %s" % (self.receiver.number,self.post,self.post_personna) 
     except : 
      return "%s : %s : %s" % (self.receiver,self.post,self.post_personna) 
    def __unicode__(self): 
     return "%s : %s : %s " % (self.receiver.number,self.post,self.post_personna) 

class Box_Post_Personna_User(models.Model): 
    receiver = models.OneToOneField("Profile.Profile_User",related_name="receiver_post_box_personna",blank=True,null=True) 
    post_personna = models.ManyToManyField("Post.Post_Personna",blank=True,related_name="post_in_box_personna_user") 
    modif_box = models.ForeignKey("Modif_Box.Modif_Box_User",blank=True,null=True) 
    last_viewed = models.IntegerField(blank=True,null=True) 
    date = models.DateTimeField(default=timezone.now, blank=True) 
    date_sys_added = models.DateTimeField(default=timezone.now, blank=True) 
    def __str__(self) : 
     try : 
      return "%s : %s : %s" % (self.receiver.number,self.post,self.post_personna) 
     except : 
      return "%s : %s : %s" % (self.receiver,self.post,self.post_personna) 
    def __unicode__(self): 
     return "%s : %s : %s " % (self.receiver.number,self.post,self.post_personna) 



from django.db.models.signals import m2m_changed 
#from Post_Box.models import Box_Post_User 
#from Post.models import Post_User 
from django.dispatch import receiver 


@receiver(m2m_changed, sender=Box_Post_User.post) 
def box_post_user_changed(sender, **kwargs): 
    print("signal") 
    print("m2m") 
    if kwargs['action'] == "post_add" and kwargs["model"] == Post_User : 
     obj=kwargs['instance'] 
     mb = obj.modif_box 
     pk_set = kwargs.get('pk_set', []) or [] 
     for pk in pk_set : 
      mb.new_post_user.add(pk) 

Model profil:

from django.db import models 
from django.contrib.auth.models import User 
from django.utils import timezone 
from Profile.profile_script import Token_Generator 
from django.contrib.auth.models import User 
# Create your models here. 
from django.conf import settings 
try: 
    from django.contrib.auth import get_user_model 
    User = settings.AUTH_USER_MODEL 
except ImportError: 
    from django.contrib.auth.models import User 


class Profile_User(models.Model): 
    user = models.OneToOneField(User, null=True) 
    name = models.TextField(blank=True,null=True) 
    token = models.TextField(blank=True,null=True) 
    token_google = models.TextField(blank=True,null=True) 
    langue = models.TextField(blank=True) 
    country = models.TextField(blank=True) 
    avatar_base64 = models.TextField(blank=True) 
    number = models.TextField(blank=True) 
    active = models.BooleanField(default=True) 
    date_sys_added = models.DateTimeField(default=timezone.now, blank=True) 
    nuyen = models.IntegerField(blank=True,null=True) 
    date = models.DateTimeField(default=timezone.now, blank=True) 
    mu = models.FloatField(null=True,blank=True) 
    sigma = models.FloatField(null=True,blank=True) 
    def __str__(self) : 
     return "%s : %s" % (self.name,self.number) 
    def __unicode__(self): 
     return "%s" % (self.user) 
    def save(self, *args, **kwargs): 
     #print("token") 
     #print(self.token) 
     if self.token is None or self.token == "" : 
      #print("titi") 
      super(Profile_User, self).save(*args, **kwargs) 
      self.token = Token_Generator(self.id) 
     super(Profile_User, self).save(*args, **kwargs) 



class Type_Personna(models.Model): 
    name = models.CharField(max_length=20,blank=True,null=True) 
    date_sys_added = models.DateTimeField(default=timezone.now, blank=True) 
    date = models.DateTimeField(default=timezone.now, blank=True) 

class Personna(Profile_User): 
    type_personna = models.ForeignKey("Type_Personna") 
    def __unicode__(self): 
     return "%s" % (self.name) 

Mój błąd:

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 351, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 343, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 177, in fetch_command 
    commands = get_commands() 
    File "/usr/lib/python3.4/functools.py", line 448, in wrapper 
    result = user_function(*args, **kwds) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 72, in get_commands 
    for app_config in reversed(list(apps.get_app_configs())): 
    File "/usr/local/lib/python3.4/dist-packages/django/apps/registry.py", line 137, in get_app_configs 
    self.check_apps_ready() 
    File "/usr/local/lib/python3.4/dist-packages/django/apps/registry.py", line 124, in check_apps_ready 
    raise AppRegistryNotReady("Apps aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 

Pozdrawiam i dzięki

Odpowiedz

14

Try rejestracji sygnałów gdy te aplikacja f irst ładunki.

W Tobie __init.py__ file:

default_app_config = 'yourappname.apps.YourAppConfig' 

W apps.py app:

from django.apps import AppConfig 


class YourAppConfig(AppConfig): 
    name = 'yourappname' 

    def ready(self): 
     from yourappname import signals 

Zrób to dla każdej aplikacji zaangażowany w rejestracji sygnałów.

Read this, aby uzyskać więcej informacji.

+0

mam dużo tego rodzaju błędu: /home/temp/Post_Box/models.py:27: RemovedInDjango19Warning: Wzorcowa klasa Post_Box.models.Box_Post_Personna_User nie deklarować jawne app_label i albo nie znajduje się w aplikacji w INSTALLED_APPS, albo został zaimportowany przed załadowaniem aplikacji. To nie będzie już obsługiwane w Django 1.9. – user462794

+0

Zasadniczo ten błąd występuje, gdy zaobserwowana jest sytuacja importu cyklicznego. Sprawdź, czy robisz okrągły import w dowolnym miejscu w projekcie. – v1k45

2

Jest kilka rzeczy do wypróbowania:

  • usunięcie „od django.contrib.auth importowej get_user_model” ma nie używać go w każdym razie i to nie działa, zanim aplikacja jest załadowana. Nie wiem, czy samo importowanie wyzwala problem, czy też go używasz, ale lepiej jest mu to ochronić niż przepraszać.
  • Jeśli masz pakiety modeli (katalog z init .py) zamiast pliku models.py, musisz jawnie zadeklarować app_label w każdym modelu używanym w ich "Meta klasy".
  • jeśli nic z tego nie działa, spróbuj przenieść kod, który Twoim zdaniem powoduje to w metodzie konfiguracji aplikacji.

np:

from django.apps import AppConfig 


class ProductsConfig(AppConfig): 
    name = 'your_app_name' 

    def ready(self): 
     YourModel = self.get_model('YourModel') 
     # do stuff with the model 

BTW: modele, jak wszystkich klas, są lepiej nazwie bez podkreślenia, takie jak Profile_User => ProfileUser.

Powodzenia!

13

w Django 1.9

# it is not need edit __init__.py 

apps.py

from django.apps import AppConfig 

class YourAppConfig(AppConfig): 

    name = 'your_app_name' 
    verbose_name = 'Your App Name' # optional 

    def ready(self): 
     from your.app.path import signals # import your signals.py 

ustawień.py

# include path to YourAppConfig class: 

INSTALLED_APPS = [ 
    your_app.apps.YourAppConfig', 
    # ..., 
] 

see django docs

+0

Tęskniłeś za "w swoim poście. –

Powiązane problemy