Django 는 어떻게 대량으로 Model 을 만 듭 니까?

1.머리말:
테스트 데 이 터 를 모두 데이터베이스 에 입력 하 는 것 은 매우 번 거 롭 고 파트너 와 함께 개발 하고 배치 하면 그들 은 데 이 터 를 입력 하 는 번 거 로 운 과정 에 시간 을 쓰 고 싶 지 않 을 것 이다.이때 데 이 터 를 대량으로 입력 하 는 스 크 립 트(population script)를 만 드 는 것 이 필요 하 다.
2.코드:
models.py 에서 정 의 된 데 이 터 를 다음 으로 가정 합 니 다.

from django.db import models
 
# Create your models here.
class Category(models.Model):
  name=models.CharField(max_length=128,unique=True)
  class Meta:
    verbose_name_plural="Categories"
  def __str__(self):
    return self.name
 
class Page(models.Model):
  category=models.ForeignKey(Category,on_delete=models.CASCADE)
  title=models.CharField(max_length=128)
  url=models.URLField()
  views=models.IntegerField(default=0)
  def __str__(self):
    return self.title
populate.py 는 다음 과 같 습 니 다(참고 만 제공).

import os
# In your live server environment, you'll need to tell your WSGI application what settings
# file to use. Do that with os.environ:
#reference source:https://docs.djangoproject.com/en/3.1/topics/settings/
os.environ.setdefault('DJANGO_SETTINGS_MODULE','tango_with_django_project.settings')
 
import django
django.setup()
from rango.models import Category,Page
#If you're using components of Django “standalone” C for example, writing a Python script
# which loads some Django templates and renders them, or uses the ORM to fetch some data C
# there's one more step you'll need in addition to configuring settings.
# After you've either set DJANGO_SETTINGS_MODULE or called configure(), you'll need to call
# django.setup() to load your settings and populate Django's application registry.
# reference source:https://docs.djangoproject.com/en/3.1/topics/settings/
def populate():
  python_pages=[
    {"title":"official",
    "url":"http://docs.python.org"},
    {"title":"How to think like a computer scientis",
    "url":"http://ww.greenteapress.com/thinkpy"},
    {"title":"learn python in 10 minites",
    "url":"http://www.korokithakis.net/tutorials/python"}
  ]
 
  django_pages=[
    {"title":"Official Django tutorial",
    "url":"https://docs.jangoproject.com/en/1.9/intro"},
    {"title":"Django Rocks",
    "url":"http://www.djangorocks.com"
    },
    {"title":"HOw to tango with django",
    "url":"http://www.tangowithdjango.com"}
  ]
 
  other_pages=[
    {"title":"Bottle",
    "url":"http://bottlepy.org"},
    {"title":"Flask",
    "url":"http://flask.pocoo.org"},
    {"title":"Bold test",
    "url":"http://boldtest.org"}
  ]
  cats={"Python":{"pages":python_pages},
  "Django":{"pages":django_pages},
  "Other Frameworks":{"pages":other_pages}}
 
  def add_page(cat,title,url,views=0):
    p=Page.objects.get_or_create(category=cat,title=title,url=url,views=views)[0]
    # p.url=url
    # p.views=views
    p.save()
    return p
  def add_cat(name):
    c=Category.objects.get_or_create(name=name)[0]
    c.save()
    return c
  for cat,cat_data in cats.items():
    c=add_cat(cat)
    for p in cat_data['pages']:
      add_page(c,p["title"],p['url'])
  for c in Category.objects.all():
    for p in Page.objects.filter(category=c):
      print("-{0}-{1}".format(str(c),str(p)))
 
if __name__=="__main__":
  print("starting rango population script")
  populate()
3.코드 요점
(1)django 의 코드 를 독립 적 으로 실행 할 때 python manage.py runserver 를 통 해 실행 되 는 것 이 아니 라 django.setup()을 사용 하여 Django 프로젝트 의 설정 을 도입 해 야 합 니 다.설정 을 도입 하기 전에 환경 변 수 를 가 리 켜 야 합 니 다.DjangoSETTINGS_MODULE 은 이 항목 의 settings 를 사용 합 니 다.
환경 변 수 를 python 에서 자주 사용 하 는 os.environ 을 설정 합 니 다.사전 형식 을 되 돌려 줍 니 다.모든 환경 변수의 키 쌍 이 포함 되 어 있 기 때문에 사전 내 장 된 방법 setdefault 을 사용 하여 환경 변 수 를 설정 합 니 다.
'DJANGO_SETTINGS_MODULE'를'tango'로 설정with_django_procject.settings'(이 항목 의 settings.py).
참조:https://docs.djangoproject.com/en/3.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE
(2)get_or_create 방법:(공식 문서 정의https://docs.djangoproject.com/en/3.1/ref/models/querysets/#get-or-create다음 과 같다)

get_or_create(defaults=None, **kwargs)
A convenience method for looking up an object with the given kwargs (may be empty if your model has defaults for all fields),<br> creating one if necessary.
Returns a tuple of (object, created), where object is the retrieved or created object and created is a boolean specifying whether a new <br>object was created.
This is meant to prevent duplicate objects from being created when requests are made in parallel, and as a shortcut to boilerplatish code. <br>
여기 서 주의해 야 할 것 은 model instance 를 만 들 때 model 에 기본 값 이 있 는 경우 에 만 kwargs 를 입력 하지 않 을 수 있 습 니 다.그렇지 않 으 면 최소한 하나의 값(field,예 를 들 어 이 page 의 category,또는 Category 의 name)을 입력 해 야 합 니 다.그리고 이 방법 은 이 값 이 있 는 model instance 를 찾 습 니 다.없 으 면 새 것 을 만 듭 니 다.반환(object,created),여기 object 는 새로 만 든 대상 의 reference 이 며,created 는 True 입 니 다.
4.보기 실행
python populate.py 실행:

그리고 admin 페이지 에 로그 인하 여 보기:

데이터 가 모두 데이터베이스 에 읽 히 는 것 을 볼 수 있다.
이상 은 Django 가 Model 을 어떻게 대량으로 만 드 는 지 에 대한 상세 한 내용 입 니 다.Django 가 Model 을 대량으로 만 드 는 지 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기