3

I'm trying populate data in my modal using Faker but I got the error. here is my Code

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')

I think error is due to this line

os.environ.setdefault

but when I comment this line it doesn't populate data

Below is the error

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJA NGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

4

3 回答 3

7

You should call django.setup() before importing your models:

import os
import random
from faker import Faker

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

from first_app.models import Topic, Webpage, AccessRecord

#...
于 2019-12-20T10:06:48.237 回答
0

I got recently a very similar error

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...

This happened, because I was running pytest in the root folder, not in the project folder. Error disappeared when I executed the tests in project folder.

Hope this is helpful to someone!

于 2020-06-12T07:43:25.540 回答
0

I just debug my populate.py file and found that i was importing the models.py before configuring Django so first you need to set environment then you need to setup Django and at last you can import models in populate.py file.

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')
于 2020-12-16T14:49:20.647 回答