django_address 모듈은 초기 국가 데이터를 시드 할 수있는 방법을 제공합니까?

데이브 :

나는 최근에 django_address 모듈을 설치 장고 2.0, 파이썬 3.7와 MySQL 5를 사용하고 있습니다. 내 models.py 파일을 기반으로 내 초기 마이그레이션을 실행했을 때 나는 눈치 ...

from django.db import models

from address.models import AddressField
from phonenumber_field.modelfields import PhoneNumberField


class CoopType(models.Model):
    name = models.CharField(max_length=200, null=False)

    class Meta:
        unique_together = ("name",)


class Coop(models.Model):
    type = models.ForeignKey(CoopType, on_delete=None)
    address = AddressField(on_delete=models.CASCADE)
    enabled = models.BooleanField(default=True, null=False)
    phone = PhoneNumberField(null=True)
    email = models.EmailField(null=True)
    web_site = models.TextField()

그것은 포함한 일부 주소 테이블을 생성 ...

mysql> show create table address_country;
+-----------------+---------------------------------------------------+
| Table           | Create Table                                      |
+-----------------+---------------------------------------------------+
| address_country | CREATE TABLE `address_country` (                  |
|                 |   `id` int(11) NOT NULL AUTO_INCREMENT,           |
|                 |   `name` varchar(40) COLLATE utf8_bin NOT NULL,   |
|                 |   `code` varchar(2) COLLATE utf8_bin NOT NULL,    |
|                 |   PRIMARY KEY (`id`),                             |
|                 |   UNIQUE KEY `name` (`name`)                      |
|                 | ) ENGINE=InnoDB                                   |
|                 | DEFAULT CHARSET=utf8 COLLATE=utf8_bin             |
+-----------------+---------------------------------------------------+

그러나,이 표는 그 안에 데이터가 없습니다. 모듈에 의해 생성 된 테이블의 씨앗 데이터를 얻거나 할 내 자신에 그것을 발굴해야 할 수있는 방법이 있습니까?

solarissmoke :

난 당신이 간단한 관리 명령을 쓰기 좋을 것 그 수입 데이터 pycountry 주소 모델로 (에서 차용 접근 여기 ). pycountry은 국가의 ISO 표준 목록의 래퍼이다 - 즉, 당신이받을거야으로 국가의 정규 목록으로에 관하여이다.

관리 명령은 당신에 모든 국가 채울 Country같이 보일 것입니다 모델 :

import pycountry
from django.core.management.base import BaseCommand, CommandError

from address.models import Country

class Command(BaseCommand):
    help = "Populates address.Country with data from pycountry."

    def handle(self, *args, **options):
        countries = [
            Country(
                code=country.alpha_2,
                name=country.name[:40],  # NOTE - concat to 40 chars because of limit on the model field
            )
            for country in pycountry.countries
        ]

        Country.objects.bulk_create(countries)
        self.stdout.write("Successfully added %s countries." % len(countries))

이것은 국가의 ISO리스트 모델을 채 웁니다.

여기서 한 가지주의는 점이다 address.Country.name자릅니다 위의 스크립트, 그래서 - 필드 (ISO 2 문자 코드가 확실히 고유 국가 코드 고유하게하지 않는 결정과 함께, 나에게 의심 디자인 결정처럼 보인다) 40 자로 제한됩니다 에 맞게 이름을 지정합니다. 이 당신을 위해 문제가 될 경우 당신이 차용, 자신의 주소 모델을 설정 제안 django-address및 문자 제한을 제기.

추천

출처http://43.154.161.224:23101/article/api/json?id=8897&siteId=1