django_address模块 是否提供一种播种初始国家/地区数据的方法?

问题描述 投票:2回答:4

我正在使用Django 2.0,Python 3.7和MySql5。我最近安装了django_address模块​​。当我根据我的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             |
+-----------------+---------------------------------------------------+

但是,该表中没有数据。有没有一种方法可以获取模块生成的表的种子数据,或者我需要自己对其进行挖掘?

python django python-3.x seeding
4个回答
3
投票

您可以使用django-countries并在模型中包含CountryField。这包括对模型的支持以及对表单的选择字段。

由于这是内置的,您可以在模型中很好地包含它,而不必担心为表添加种子。


1
投票

您可以使用pycountry package轻松地自己创建国家/地区。

由于在创建的pycountry模型上的code字段的最大长度为两个字符,因此您将需要使用Country代码。

我通常将alpha_2用于此类情况。也许添加检查以查看是否已创建任何对象,然后根据需要进行处理。

从shell custom management command使用

python manage.py create_countries

如果生产服务器未运行Python / Django,则可以使用from address.models import Country from pycountry import countries from django.core.management.base import BaseCommand class Command(BaseCommand): help = 'Initialize Country model' def handle(self, *args, **kwargs): create_countries = [ Country(name=country.name, code=country.alpha_2) for country in countries ] Country.objects.bulk_create(create_countries) self.stdout.write(f'Created {len(countries)} countries.\n') 创建包含相关数据的CSV文件。假设您使用的是PostgreSQL,则可以使用pycountry填充数据库。

COPY FROM command

0
投票

为什么此表中没有数据?

COPY FROM

迁移是Django将对模型所做的更改(添加字段,删除模型等)传播到数据库模式中的方式。

简而言之,Django的import csv from pycountry import countries with open('countries.csv', mode='w') as countries_file: # specify delimiter because some countries have a comma writer = csv.writer(countries_file, delimiter='\t') writer.writerow(['id', 'name', 'code']) writer.writerows([ [index + 1, country.name, country.alpha_2] for index, country in enumerate(countries) ]) 命令不负责填充初始数据


有没有办法获取表格的种子数据?

[AFAIK,该程序包不提供任何种子数据,您需要将数据放入表中。获得种子数据(“ From the Django doc”)后,可以使用migrate命令将其加载到表中。


0
投票

如上所述,您需要自己添加实际数据。您需要准备它并进行一次上传。如果仅在查找国家/地区数据,请选择in proper format and structure。还有一个名为loaddata --(Django doc)的django应用程序,可让您拥有更多的数据和控件,包括标志,ISO代码等。loaddata是另一个具有3个字母代码的数据库。希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.