django.core.exceptions.ImproperlyConfigured:请求的设置为INSTALLED_APPS,但未配置设置

时间:2019-12-20 10:02:40

标签: python django django-3.0

我正在尝试使用Faker在模态中填充数据 但是我得到了错误。 这是我的代码

import os
from faker import Faker
from first_app.models import Topic, Webpage, AccessRecord

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myfirst.settings')
import django
django.setup()
import random

fakegen = Faker()
topics = ['search', 'Social', 'Marketplace', 'News', 'Games']


def add_topic():
    t = Topic.objects.get_or_create(top_name=random.choice(topics))[0]
    t.save()
    return t

def populate(N=5):
    for entry in range(N):
        top=add_topic()
        fake_url=fakegen.url()
        fake_date=fakegen.date()
        fake_name=fakegen.company()

        webpg=Webpage.objects.get_or_create(topic=top,url=fake_url,name=fake_name)[0]

        acc_rec=AccessRecord.objects.get_or_create(name=webpg,date=fake_date)[0]

if __name__=='__main__':
    print('populating script')
    populate(30)
    print('Completed')

我认为错误是由于此行

  

os.environ.setdefault

但是当我对此行发表评论时,它不会填充数据

下面是错误

  

django.core.exceptions.ImproperlyConfigured:请求的设置为INSTALLED_APPS,但未配置设置。您必须定义环境变量DJA   NGO_SETTINGS_MODULE或在访问设置之前调用settings.configure()。

3 个答案:

答案 0 :(得分:1)

导入模型之前,您应该致电foo(a)

django.setup()

答案 1 :(得分:0)

我最近遇到了一个非常相似的错误

ERROR project/tests/test_models.py - django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are no...
ERROR project/tests/test_priced_offers.py - django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings...

发生这种情况是因为我在根文件夹中而不是在项目文件夹中运行pytest。当我在项目文件夹中执行测试时,错误消失了。

希望这对某人有帮助!

答案 2 :(得分:0)

我只是调试我的populate.py文件,发现在配置Django之前我正在导入models.py,因此首先需要设置环境,然后需要设置Django,最后可以在populate.py文件中导入模型。

from faker import Faker
import random
import django
import os

# Configure settings for project
# Need to run this before calling models from application!
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'first_model.settings') # this should be done first.

# Import settings
django.setup() # This needs to be done after you set the environ

from first_app.models import Topic, WebPage, AccessRecord # At last you can import models in populate.py file


fakegen = Faker()
topics = ['Search', 'Social', 'Marketplace', 'News', 'Games']


def add_topic():
    t = Topic.objects.get_or_create(top_name=random.choice(topics))[0]
    t.save()
    return t


def populate(N=5):
    '''
    Create N Entries of Dates Accessed
    '''

    for entry in range(N):

        # Get Topic for Entry
        top = add_topic()

        # Create Fake Data for entry
        fake_url = fakegen.url()
        fake_date = fakegen.date()
        fake_name = fakegen.company()

        # Create new Webpage Entry
        webpg = WebPage.objects.get_or_create(
            topic=top, name=fake_name, url=fake_url,)[0]

        # Create Fake Access Record for that page
        # Could add more of these if you wanted...
        accRec = AccessRecord.objects.get_or_create(
            name=webpg, date=fake_date)[0]


if __name__ == '__main__':
    print("Populating the databases...Please Wait")
    populate(20)
    print('Populating Complete')