2016-03-26 13 views
12

Desidero utilizzare get_model() per evitare le importazioni cicliche nei miei modelli, ma ottengo l'errore name 'get_model' is not defined. Ho letto che get_model() è stato ammortizzato in 1.8 e apparentemente non è presente in 1.9. Qual è la chiamata equivalente? O esiste un altro modo per evitare le importazioni cicliche in due file models.py?Qual è l'equivalente di django.db.models.loading.get_model() in Django 1.9?

+0

'apps.get_model()' non aiuterà a risolvere le importazioni circolari. Se si evitano le importazioni circolari utilizzando 'apps.get_model()' all'interno di una funzione, un'importazione in linea funzionerà altrettanto bene. Per 'ForeignKey' e simili, puoi usare i riferimenti alle stringhe, ad esempio' models.ForeignKey ('myapp.MyModel') '. – knbk

risposta

27

django.db.models.loading.get_model() è stato rimosso in django 1.9.

Si suppone di utilizzare django.apps invece.

>>> from django.apps import apps 
>>> apps.get_model('shop', 'Product') 
<class 'shop.models.Product'> 
>>> 

Django docs reference

+0

Ciò mi è stato di grande aiuto nella conversione di un'app per passare dalla compatibilità da Django 1.8 a Django 1.11. Qual è la differenza tra 'django.apps.apps.get_model' e' django.apps.AppConfig.get_model'? – MadPhysicist

+0

'apps.get_model' è utile nel contesto globale (modelli di tutte le app) e' AppConfig.get_model' è utile per trovare i modelli per un'app specifica. – v1k45

Problemi correlati