2017年10月28日 星期六

Django - 利用Faker產生填充資料

開發系統時,往往都會需要一些填充資料去做測試,此筆記將利用Faker來產生填充資料


安裝Faker
pip install Faker


新增py檔於專案跟目錄底下

import os
# Configure settings for project
# Need to run this before calling models from application!
os.environ.setdefault('DJANGO_SETTINGS_MODULE','first_project.settings')

import django
# Import settings
django.setup()

import random
from first_app.models import Topic,Webpage,AccessRecord
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):
    '''
    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,url=fake_url,name=fake_name)[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')

備註:
get_or_create()用於讀取以及寫入,查詢不存在時即寫入



1 則留言:

  1. Hello,
    Can you just answer a question about this?

    when I populate the model I get this error:
    "django.core.exceptions.FieldError: Invalid field name(s) for model AccessRecord: 'date', 'name'."

    Although I have exactly the same as what you have written.
    Thanks in advance.

    回覆刪除