簡體   English   中英

在Django的settings.py中導入模型

[英]Import model in Django's settings.py

我正在嘗試使用settings.py的model類的值定義一個常量,為我的一個模型提供動態定義的FK:

from catalog.models import Product
PRODUCT_MODEL = Product

毫不奇怪,它導致AppRegistryNotReady異常:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

因為沒有調用django.setup()方法。

如果我加

import django
django.setup()

在模型的導入前面,而不是AppRegistryNotReady異常,我得到了

AttributeError: 'Settings' object has no attribute 'PRODUCT_MODEL'

我正在使用的時候

from django.conf import settings
...

product = models.ForeignKey(
    settings.PRODUCT_MODEL, 
    related_name='order_items')

有沒有辦法實現這個沒有錯誤?

我正在使用Python 3.5和Django 1.9.5。

您不應導入模型或在設置文件中調用django.setup()

而是使用字符串來引用您的模型。

PRODUCT_MODEL = 'catalog.Product'

然后,在您的模型中,您可以使用該設置。

product = models.ForeignKey(
    settings.PRODUCT_MODEL, 
    related_name='order_items',
)

請注意, AUTH_USER_MODEL設置使用這樣的字符串,您不會在設置文件中導入用戶模型。

將模型名稱存儲為字符串。

在settings.py中:

PRODUCT_MODEL = 'YourModel'

在你的models.py中:

from django.apps import AppConfig
....
field = models.ForeignKey(AppConfig.get_model(PRODUCT_MODEL))

(這適用於Django 1.9。)

在設置和延遲導入中使用catalog.Product

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM