Django 1.9 itiraz uyarıları app_label

Django v1.8’e yeni geçtim ve projemi güncellemeden önce yerel kurulumumu test ettim ve daha önce hiç görmediğim bir kullanımdan çıkarma uyarısı aldım, bu da bana bir şey ifade etmiyor. Ben sadece birşeye göz yumuyorum ya da belgeleri yanlış anlıyor olabilirim.

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:6: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Difficulty doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Difficulty(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:21: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Zone doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Zone(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:49: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Boss doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Boss(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:79: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Item doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Item(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:14: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Category doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Category(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:36: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Comment doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Comment(ScoreMixin, ProfileMixin, models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:64: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Forum doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Forum(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:88: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Post doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Post(ScoreMixin, ProfileMixin, models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:119: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.CommentPoint doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class CommentPoint(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:127: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.TopicPoint doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class TopicPoint(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/auctionhouse/models.py:10: RemovedInDjango19Warning: Model class ankylosguild.apps.auctionhouse.models.Auction doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Auction(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/auctionhouse/models.py:83: RemovedInDjango19Warning: Model class ankylosguild.apps.auctionhouse.models.Bid doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Bid(models.Model):

Şimdi bu benim için 3 soru ortaya koyuyor.

  1. dokümantasyonuna , < model uygulama modülünün dışında olmadıkça, benim durumumda olmadığı sürece code> Options.app_label bir gereklilik değildir. İkincisi, yine de bu davranış 1.7'de kullanımdan kaldırıldı, peki neden bir sorun var?
  2. Uygulamaların tümü INSTALLED_APPS dizisindedir, bu yüzden kesinlikle öyle olamaz mı?
  3. Her şey INSTALLED_APPS bölümünde ise, uygulamalar neden çağrılmadan önce yüklenmiyor?

Eğer gerçekten yanlış bir şey yapıyorsam, doktorlar bu soruna neyin neden olduğunu veya onu nasıl düzelteceğinizi tam olarak netleştiremediğinden bunu yapmanın doğru yolu nedir?

57

12 cevap

Benzer hata. Benim durumumda hata oldu:

RemovedInDjango19Warning: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
class Site(models.Model):

Benim çözümüm:

Added 'django.contrib.sites' to INSTALLED_APPS

50
katma
Belki de cevabımda net değildim, çünkü orijinal hatam OP ile neredeyse aynıydı, bu yüzden cevabımı daha net hale getirmek için güncelledim. Benim durumumda 'django.contrib.sites' 'i ekledim. Sizce bu cevabın neden başkaları için yararlı olamayacağından emin değilim.
katma yazar WayBehind, kaynak
@Anand S Kumar ... meraktan hemen sonra neden bu sorumla alakasız olduğumla ilgili yorumunu kaldırdın?
katma yazar WayBehind, kaynak
1.8 kullanıyorum. Bunu yapmak django.contrib.sites.models.DoesNotExist ile sonuçlandı: Site eşleştirme sorgusu mevcut değil. Bu yüzden uyarıyla yaşamaya döndüm.
katma yazar sureshvv, kaynak
zamanımı kurtardım ... teşekkürler
katma yazar Null Pointer, kaynak
Django ayraçları ve django.contrib.auth modülünün İzin modeli ile benzer bir sorunum vardı. INSTALLED_APPS grubuna django.contrib.auth ekledim ve işe yaradı. Teşekkürler.
katma yazar Matthew Purdon, kaynak

Uyarıda belirtildiği gibi, bu da olur:

  • INSTALLED_APPS olmayan bir model kullanırken,
  • Veya uygulaması yüklenmeden önce bir model kullanırken.

Uygulamayı INSTALLED_APPS ayarında yönlendirdiğiniz için, uygulama başlatılmadan önce bir model kullanıyor olabilirsiniz.

Bu genellikle, bir apps.py erken sinyalinde (örneğin post_migrate ) .models'tan SomeModels 'ı içe aktardığınızda gerçekleşir. Modellerinizi burada klasik yolla belirtmek yerine, AppConfig.get_model() . Herhangi bir model içe aktarma için apps.py dosyanızı kontrol edin ve bu api'yi kullanarak değiştirin.

Örneğin yerine:

# apps.py

from django.apps import AppConfig
from .models import MyModel

def do_stuff(sender, **kwargs):
    MyModel.objects.get() # etc...

class MyAppConfig(AppConfig):
    name = 'src.my_app_label'

    def ready(self):
        post_migrate.connect(do_stuff, sender=self)

Bunu yap :

# apps.py

from django.apps import AppConfig

def do_stuff(sender, **kwargs):
    mymodel = sender.get_model('MyModel')
    mymodel.objects.get() # etc...

class MyAppConfig(AppConfig):
    name = 'src.my_app_label'

    def ready(self):
        post_migrate.connect(do_stuff, sender=self)

Bu uygulamanın

# 21719 hatalarında kullanıldığını unutmayın.

49
katma
Denemek sana kalmış. Bu sorunla karşılaştım ve bu şekilde çözdüm. Hata bilgisine bakın ve daha fazla bilgi edinmek için gerçek kod taahhüt eder.
katma yazar Sidhartha, kaynak
İlginç, bunun tam olarak sorun olduğunu sanmıyorum. Uygulamalarımdan yalnızca birinde sinyalleri kullanıyorum; Bu üç uygulama için bir hataya neden olur mu?
katma yazar Neil Ashley Hickman, kaynak
Teşekkürler. Benim için ana urls.py özel bir model ithal ediyordu.
katma yazar Derrick Petzold, kaynak

Benimle aynı şeyden kaynaklanacak bu hatayı gören insanların sadece küçük bir azınlığı olacağından şüpheleniyorum, ancak bir başkasına yardım etmesi durumunda bu cevabı eklemeye değer görünüyor!

Bir noktada testler yaparken birdenbire bu hataların çoğunu gördüm - bir alt dizinde olacak şekilde Django projemin en üst seviyesinde yanlışlıkla bir __init__.py yarattığım ortaya çıktı. . Bunun yaşandığına dair ipucu, bunun gibi olan hatalardı:

/home/mark/mystupiddjangoproject/alerts/models.py:15: RemovedInDjango19Warning: Model class mystupiddjangoproject.alerts.models.Alert doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
  class Alert(models.Model):

... projenin tam olarak nitelenmiş model adına dahil edilmesi gereken dizinin adını ( mystupiddjangoproject ) içeriyordu: alerts.models.Alert .

Bunu düzeltmek için yapmam gerekenler:

rm __init__.py
rm __init__.pyc
23
katma
Bu da bana yardımcı oldu ... modelimin tuhaf bir alt kümesini de etkiledi ve bu da onu daha da belirsiz hale getirdi. Teşekkürler!
katma yazar ZachM, kaynak
Temel nedenin code.djangoproject.com/ticket/26570 adresinde açıklandığını düşünüyorum.
katma yazar Torsten Bronger, kaynak
Bu hatayı yalnızca ünite testleri çalıştırırken aldım, uygulamayı normal çalıştırırken değil, düzeltildi! Çok teşekkürler!
katma yazar EM0, kaynak
Kimsenin sorunuma bir çözümü olmadığından korktum, ama bu düzeltti!
katma yazar allthethings, kaynak

Benzer bir hatayla karşılaşıyordum, ancak uygulamalarımdaki modeller hakkında şikayet etmek yerine, katkıda paketlerindeki modeller hakkında şikayet ediyordu. Örneğin:

C: \ Program Dosyaları \ Python 2.7 \ lib \ site-paketleri \ django \ contrib \ sessions \ models.py: 27: RemovedInDjango19Warning: Model sınıfı django.contrib.sessions.models.Session açık bir açıklama yapmıyor app_label ve ya INSTALLED_APPS içindeki bir uygulamada değil ya da başvurusu yüklenmeden başka bir içeri aktarıldı. Bu artık Django 1.9'da desteklenmeyecek.     sınıf oturumu (models.Model):

Bunun nedeni, settings.py öğesindeki INSTALLED_APPS özelliğinde hatalı bir sırada bulunmasıdır. Benim settings.py başlangıçta şunları içeriyordu:

INSTALLED_APPS = (
    'my_app_1',
    'my_app_2',
    'my_app_3',
    'bootstrap_admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'social.apps.django_app.default',
    'mathfilters',
    'rest_framework',
)

my_app_* use models from the contrib packages. The error is caused by using models before declaring them (i.e. Django should know about the apps containing those models before using them).

Bunu çözmek için uygulamaların bildirildiği sıranın değiştirilmesi gerekir. Özellikle, tüm Django uygulamaları kullanıcı tarafından tanımlanan uygulamalardan önce gelmelidir . Benim durumumda, doğru INSTALLED_APPS gibi görünür:

INSTALLED_APPS = (
    'bootstrap_admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'social.apps.django_app.default',
    'mathfilters',
    'rest_framework',
    'my_app_1',
    'my_app_2',
    'my_app_3',
)

Şimdi bunun doğrudan sorunuzu yanıtlamayabileceğini biliyorum, ancak ilgili bir soruyu yanıtlıyor ve bu, Google’da hatayı yapıştırırken gösteren tek SO bağlantısı olduğundan, bu soruyu yanıtladım.

However, I believe a similar situation is causing your problem:

Make sure you declare the "dependency" apps before the apps using them! The errors don't really specify which app is using a model, so you would have to push the app containing the model it mentions to the top, one by one, until the error disappears.

9
katma

Bir app_label niteliği ile modelinize bir meta sınıf ekleyin.

class Meta:
    app_label = 'app_model_belongs_to'

Umarım bu işe yarar!

EDIT: The reason for this is usually that the model exists outside of the standard locations.

For more information refer to: https://docs.djangoproject.com/en/1.8/ref/models/options/#app-label

7
katma
Dokümanları okursanız, 1.7'de app_label'in artık gerekli olmadığını göreceksiniz. Yani bu gerçekten soruyu cevaplamıyor.
katma yazar Neil Ashley Hickman, kaynak
Geçici bir çözüm bir çözüm değildir, daha sonraki bir aşamada ele alınması gereken sorunu örtbas eder.
katma yazar Neil Ashley Hickman, kaynak
Yeterince adil. Daha iyi bir cevap bulmak için bu konuda çalışmaya devam edeceğim. Geri dönüşünüz için teşekkür ederiz
katma yazar Justin Ober, kaynak
Doktorda bunun 1.7'de gerekli olmadığını gördüm. Ancak bu, Django 1.9 için bir tür PendingDeporcation hatasıdır. Bu benim hatalardan kurtulmam için sorunu çözdü. Ne olduğunu tam olarak anlamaya çalışarak test ve araştırma yapıyorum ama dediğim gibi bir çözüm bir çözüm.
katma yazar Justin Ober, kaynak

Bu sorunla da karşılaştım ve bir uygulamadan signals.py modülünü yükleme biçimim ile ilgiliydi.

Şimdi, sinyaller ve modeller arasında dairesel içe aktarma sorunları olması oldukça yaygındır ve bunları uygulamanın __init__.py dosyasından veya modellerinin altından içe aktarmak normaldir. .py dosyalardan kaçınmak için.

Şey, __init__.py yaklaşımını kullanıyordum ve yalnızca import sinyalleri deyimini models.py 'nin altına taşıyordum. dosya sorunu çözdü .

Umarım bu başka birine yardım eder!

5
katma

Bu işleme ve uygulamanıza yönetici olarak iyi bir ad vermek için Django 1.9 yöntemi aşağıdakileri yapmaktır:

Uygulamanıza apps.py adlı bir dosya ekleyin ve aşağıdakini ekleyin:

#apps.py
from django.apps import AppConfig


class YourAppNameAppConfig(AppConfig):
    name = 'yourappname'
    verbose_name = 'Your App Name Looking Right'

Ardından, uygulamanızın __init__.py dosyasında aşağıdakileri ekleyin:

#__init__.py    
default_app_config = 'youappname.apps.YourAppNameAppConfig'
4
katma

Ben de aynı problemi yaşadım. Django.db.models.base.py:line82 içine bir kesme noktası koydum ve bu uyarı iletisine neyin neden olduğunu bulmaya çalışıyorum.

# Look for an application configuration to attach the model to.
app_config = apps.get_containing_app_config(module)

Temel olarak, uygulamanız bu zamana kadar mevcut değilse, bu uyarıyı alırsınız. Sorunumun, özel modellerimden birini ithal etmeye çalışan üçüncü taraf bir çerçeveye (benim durumumda, samanlık) sahip olduğumun farkına vardım.

Belki de özel uygulamalarınızdan önce INSTALLED_APPS içinde listelenen bir üçüncü parti paketiniz var ve üçüncü parti paketiniz özel uygulamalarınıza başvuruyor? Django dinlenme çerçevesi gibi bir şey kullanıyorsanız, bu mümkün olacaktır.

4
katma

Django'yu 1.8'den 1.9.1'e yükselttikten sonra bu sorunu yaşıyorum:

RuntimeError// emem'de

Model sınıfı blog.models.BlogCategory, açık bir app_label bildirmez ve INSTALLED_APPS içindeki bir uygulamada değildir.

Bu sorunu çözmek için:

blog/models.py’de:

class BlogCategory(models.Model):
    some vars & methods

    class Meta:
        app_label = 'BlogCategory'

% 100 üzerinde çalışıyor.

4
katma
Bu basit çözüm için teşekkürler. (Neden yine de 'signals.py' isteyeyim?!? :)
katma yazar GerardJP, kaynak
@ РоманАрсеньев: Bütün bu yaygara hakkında ne olduğunu bilmiyorum. Çözümün benim için çalıştı, diğerleri için olduğu gibi. Bu, buraya göndermeniz için herkes için çalışması gerektiği anlamına gelmez. Teşekkürler ve diğerlerinin dediği gibi, eleştirmenlerin - özellikle de yanlış olduklarında - sizi üzmesine izin vermeyin.
katma yazar Malik A. Rumi, kaynak
Teşekkürler. Bu benim için mükemmel çalıştı. Mükemmel etkilenmiş jango.com/tutorial/ 'ı takip ediyorum (ki bu görünüşe göre) django == 1.9.5 sürümümle uyuşmuyor. ÇOK BASİT. İYİ ÇALIŞMAYI KAZANIN. Eleştirmenlerin sizi ezmesine izin vermeyin.
katma yazar Love and peace - Joe Codeswell, kaynak
Bu sorunu çözmez. Dokümantasyon açıkça uygulama etiketinin gerekli olmadığını belirtir. Bu sorunun çözümünü arıyorum bir bandaid değil
katma yazar Neil Ashley Hickman, kaynak
Yorum yanıltıcı değil. Cevap, asıl soruyu tam olarak cevaplamıyor. Yazma sırasında, belgeler bu çözümün bir gereklilik olmadığını ve bu nedenle verilen hatanın belgelere aykırı olduğunu belirtti.
katma yazar Neil Ashley Hickman, kaynak
Benim için Django 1.10 yığınıyla çalışmıyor
katma yazar acidjunk, kaynak
Teşekkür ederim! Bu benim için Django 1.8'de çalıştı.
katma yazar sam noir, kaynak
Yorumlarınızla insanları yanıltmayın. Bu çözüm çalışır, çoğu zaman test edilmiştir. Sınıf "Meta" kullanmak gerekir, çünkü Django veritabanında nasıl bir tablo çağıracağını gösterir, çünkü veritabanı transferi sırasında hiçbir hata yoktu.
katma yazar Роман Арсеньев, kaynak

Bazen, geçerli kaynak kodla eşleşmeyen geçersiz bir .pyc dosyaları bu soruna neden oldu.

Bu bash kullanarak hepsini yenilemek için tüm .pyc kaldırıldı

Bul -adı "* .pyc" -exec rm -rf {} \;

2
katma

Bunu çözmenin en kolay ve en basit yolu, üzerinde çalıştığınız Model dosyasının BOTTOM'una "import signal" komutunu yerleştirmektir. Bu, modellerin tümünün sinyalleri alınmadan önce yüklenmesini sağlar. Bunu, ithal ettiğiniz her model için (belirli modellere bağlı alıcılar kullanıyorsanız) veya ayarlarınızdaki "yüklü uygulamalar" ın sonunda gelen uygulama için models.py içinde yapmanız gerekir.

Diğer çözümler, yalnızca modellerin ilk önce ithal edilmeyeceği model dışı tip sinyallerle ilgileniyorsanız gereklidir.

Bu, dokümanlardaki neden belirtilmediği için bir gizemdir, çünkü bunu yapman gerektiğini hatırlayana kadar az önce yakalandım.

models.py

from django.db import models

class MyModel(models.Model):
    myfield1 = models.CharField()
    myfield2 = models.CharField()

import signals

Ve sonra signals.py'de:

from django.db.models.signals import pre_save # Or whatever you are using
from django.dispatch import receiver

from .models import MyModel

@receiver(pre_save, sender=MyModel)
def my_receiver(sender, instance, **kwargs):
    mysender = sender
    print mysender

Bunun gibi.

1
katma

Django 1.7'de hiç hata almadım. Django 1.8'e geçiş yaparken bu hatayı aldım. Sebep, sinyalin app/signal_receiver.py 'de tanımlanmasıydı.

Bir apps.py oluşturdum

from django.apps import AppConfig

class TasksConfig(AppConfig):
    name = 'core'
    verbose_name = "core"

    def ready(self):
        import core.signal.handler

Sinyal alıcısını sinyal paketinin içinde handler.py içinde taşıdım.

0
katma