为了账号安全,请及时绑定邮箱和手机立即绑定

无法预填充 django 数据库

无法预填充 django 数据库

猛跑小猪 2021-09-02 16:46:50
所以我一直在遵循 Django 1.1 中的本指南,但我实际上是在使用 Django 2 来预填充 Django 数据库我使用的是 SQLite 数据库,这是我使用 Faker 库的代码,但它不会在我运行时运行想在 CMD 中运行它。如果可以,请你帮助我:这是我的第一个文件,它是用于填充数据库的脚本:(populate_first_app.py)import osos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'first_project.settings')import djangodjango.setup()## FAKE POPULATION SCRIPT:import randomfrom first_app.models import AccessRecord,Webpage,Topicfrom 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 tdef 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!")最后,这是我在这个项目中唯一的应用程序的 models.py 文件:    from django.db import modelsclass Topic(models.Model):    top_name = models.CharField(max_length = 255, unique = True)    def __str__(self):        return self.top_nameclass 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.nameclass 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)
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

如果没有错误消息,还不清楚您的问题是什么,但我的预感是您未能在独立脚本中引导 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 帮助


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信