Python can';t预填充django数据库

Python can';t预填充django数据库,python,django,python-3.x,django-models,faker,Python,Django,Python 3.x,Django Models,Faker,所以我一直在遵循Django 1.1的指南,但实际上我使用Django 2来预填充Django数据库,我使用的是SQLite数据库,这是我与Faker库的代码,但当我想在CMD中运行它时,它不会运行。如果可以,请帮助我: 这是我的第一个文件,它是填充数据库的脚本: (首先填充app.py) 最后,这是我的models.py文件,它是我在这个项目中唯一的应用程序: from django.db import models class Topic(models.Model): to

所以我一直在遵循Django 1.1的指南,但实际上我使用Django 2来预填充Django数据库,我使用的是SQLite数据库,这是我与Faker库的代码,但当我想在CMD中运行它时,它不会运行。如果可以,请帮助我:

这是我的第一个文件,它是填充数据库的脚本: (首先填充app.py)

最后,这是我的models.py文件,它是我在这个项目中唯一的应用程序:

    from django.db import models

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


    def __str__(self):
        return self.top_name

class Webpage(models.Model):
    # A Foreign key is grabbed from another table
    topic = models.ForeignKey(Topic, on_delete=None)
    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=None)
    date = models.DateField()

    def __str__(self):
        # we cast it into string because self.date is a date object
        return str(self.date)

在没有错误消息的情况下,我们还不能完全清楚您的问题是什么,但我的直觉是,您无法在独立脚本中引导Django环境

Django有一个特殊的工具,用于构建“命令”,您可以在Django环境中运行,而无需像在populate_first_app.py中那样进行“设置”

在上面的示例中,您希望将“populate_first_app.py”移动到“first_app/management/commands/populate_first_app.py”位置。然后需要将函数放在BaseCommand中:

from django.core.management.base import BaseCommand, CommandError
from polls.models import Question as Poll
# .. other imports
class Command(BaseCommand):
   help = 'Populates test data in first_app'

   def add_arguments(self, parser):
      parser.add_argument('n', type=int)

   def handle(self, *args, **options):
      fakegen = Faker()
      for entry in range(args.n):
          #.. generate each entry
拥有此命令后,可以从manage.py运行该命令:

manage.py populate_first_app -n 20
好处是,当其他人想要使用它时,他们可以在运行时看到它


manage.py帮助

首先需要执行
python manage.py迁移

然后分别
python manage.py makemigrations

那就给点建议吧。。。AccessRecord更改为AccessRecord[y/N]? 压榨

然后
python-mange.py迁移

要执行的操作:应用所有迁移:admin、auth、, contenttypes、first_应用程序、运行迁移的会话:应用 第一个应用程序0002\u auto\u 20190731\u 1445。。。嗯

填充脚本


填充完成

我仔细检查了你的代码,发现了Django为什么不创建假数据的问题。
您已经在“populate\u first\u app.py”中缩进了main函数。删除缩进,您的代码应该可以正常工作。

如果语句缩进错误,则没有其他问题

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

import django
django.setup()

## FAKE POPULATION SCRIPT:

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

# Creating a fake generator:
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):

    # GET THE TOPIC FOR THE ENTRY:
    top = add_topic()

    # Create the fake data for that entry:
    fake_url = fakegen.url()
    fake_date = fakegen.date()
    fake_name = fakegen.company()

    # Create the new webpage entry:
    webpg = Webpage.objects.get_or_create(topic = top, url = fake_url, name = fake_name)[0]

    # Create a fake access record for that webpage
    acc_rec = AccessRecord.get_or_create(name = webpg, date = fake_date)[0]

if __name__ == '__main__':
   print("Populating Script!")
   populate(20)
   print("Populating Complete!")

怎么了?哪本指南?没有错误,只是没有运行,也没有错误。我想知道这是不是关于安全问题。这是我从一个网站上买的一个视频指南,但它是我在问题中提到的旧版本,他使用的是Django 1.1。没有足够的信息来说明问题所在,并且在这段代码中没有Django 2的具体内容。至少修复代码缩进。确保<>代码>如果yNaveNex'=='Yang-Mixi'':< /Cord>不缩进。@ AyReZA-你可以考虑为这个初始数据创建一个A.当您运行
python manage.py migrate
时,数据库表将被填充,所以我已经解决了这个问题,但是这次我遇到了一个错误!这是一个导入错误,表示无法从“Faker”导入“Faker”!你是如何安装“伪造者”的?你是用“pip安装骗子”做的吗?
(MyDjangoEnv) C:\your\file\path\first_project>python populate_first_app.py
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'first_project.settings')

import django
django.setup()

## FAKE POPULATION SCRIPT:

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

# Creating a fake generator:
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):

    # GET THE TOPIC FOR THE ENTRY:
    top = add_topic()

    # Create the fake data for that entry:
    fake_url = fakegen.url()
    fake_date = fakegen.date()
    fake_name = fakegen.company()

    # Create the new webpage entry:
    webpg = Webpage.objects.get_or_create(topic = top, url = fake_url, name = fake_name)[0]

    # Create a fake access record for that webpage
    acc_rec = AccessRecord.get_or_create(name = webpg, date = fake_date)[0]

if __name__ == '__main__':
   print("Populating Script!")
   populate(20)
   print("Populating Complete!")