Django - AttributeError: модуль 'os' не имеет атрибута 'environment' - PullRequest
2 голосов
/ 19 октября 2019

В контексте изучения Django мне нужно заполнить Sqlite случайными данными, используя модуль Faker.

Несколько моделей были созданы в models.py:

from django.db import models

class Topic(models.Model):
    top_name = models.CharField(max_length=264,unique=True)

    def __str__(self):
        return self.top_name

class Webpage(models.Model):
    topic = models.ForeignKey(Topic,on_delete=models.DO_NOTHING)
    name = models.CharField(max_length=264,unique=True)
    url = models.URLField(unique=True)

    def __str__(self):
        return self.name

class AccessRecord(models.Model):
    name = models.ForeignKey(Webpage,on_delete=models.DO_NOTHING)
    date = models.DateField()

    def __str__(self):
        return str(self.date)

Для случайного заполненияВ этих моделях я использую следующий скрипт (populate_first_app.py):

import os
os.environment.setdefault('DJANGO_SETTINGS_MODULE','first_project.settings')

import django
django.setup()

##FAKE POP SCRIPT
import random
from first_app.models import AccessRecord,Webpage,Topic
from faker import Faker


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(20)
    print('populating complete')

Когда я запускаю populate_first_app.py, я получаю следующую ошибку:

AttributeError: модуль 'os' не имеет атрибута 'environment'

Используя код Visual Studio (v1.39.2), я застрял.

Визуальный код выделяет ошибку в следующих строках:

t = Topic.objects.get_or_create(top_name=random.choice(topics))[0]

В классе «Тема» нет «объектов» memberpylint (no-member)

Я установил pylint с помощью следующей команды:

pip3 install pylint-django

Но все еще застрял.

1 Ответ

3 голосов
/ 19 октября 2019

Звонок должен быть

os.environ.setdefault('DJANGO_SETTINGS_MODULE','first_project.settings')

Для более подробной информации вы можете увидеть предыдущие вопросы, как этот: Безопасно ли использовать os.environ.setdefault?

...