在Django模型中导入python文件

在Django模型中导入python文件,python,django,Python,Django,我有一个关于从Django模型导入python文件的问题。 我正在创建一个模型表单,在这个表单中我有一个国家列表。用户可以使用列表进行选择 但是在我的models.py文件中,它非常难看,我想知道是否可以在python文件中编写国家列表,并在参数choices=country\u CHOICE 这是my models.py: #-*- coding: utf-8 -*- from django.db import models from django.forms import ModelFor

我有一个关于从Django模型导入python文件的问题。 我正在创建一个
模型表单
,在这个表单中我有一个
国家列表
。用户可以使用列表进行选择

但是在我的
models.py
文件中,它非常难看,我想知道是否可以在python文件中编写国家列表,并在参数
choices=country\u CHOICE

这是my models.py:

#-*- coding: utf-8 -*-

from django.db import models
from django.forms import ModelForm

# Sexe choice

CHOIX_SEXE = (
('M', 'Mâle'),
('F','Femelle'),
)

CHOIX_PAYS = (
('AFG','Afghanistan'),
('AF','Afghanistan'),
('ZA','Afrique du Sud'),
('AL','Albanie'),
('DZ','Algérie'),
('DE','Allemagne'),
('AD','Andorre'),
('AO','Angola'),
('AI','Anguilla'),
('AQ','Antarctique'),
('AG','Antigua-et-Barbuda'),
('AN','Antilles néerlandaises'),
('SA','Arabie saoudite'),
('AR','Argentine'),
('AM','Arménie'),
('AW','Aruba'),
('AU','Australie'),
('AT','Autriche'),
('AZ','Azerbaïdjan'),
('BJ','Bénin'),
('BS','Bahamas'),
('BH','Bahreïn'),
('BD','Bangladesh'),
('BB','Barbade'),
('PW','Belau'),
('BE','Belgique'),
('BZ','Belize'),
('BM','Bermudes'),
('BT','Bhoutan'),
('BY','Biélorussie'),
('MM','Birmanie'),
('BO','Bolivie'),
('BA','Bosnie-Herzégovine'),
('BW','Botswana'),
('BR','Brésil'),
('BN','Brunei'),
('BG','Bulgarie'),
('BF','Burkina Faso'),
('CA','Canada'),
('CV','Cap-Vert'),
('CL','Chili'),
('CN','Chine'),
('CY','Chypre'),
('CO','Colombie'),
('KM','Comores'),
('CG','Congo'),
('KP','Corée du Nord'),
('KR','Corée du Sud'),
('CR','Costa Rica'),
('HR','Croatie'),
('CU','Cuba'),
('DK','Danemark'),
('DJ','Djibouti'),
('DM','Dominique'),
('EG','Égypte'),
('AE','Émirats arabes unis'),
('EC','Équateur'),
('ER','Érythrée'),
('ES','Espagne'),
('EE','Estonie'),
('US','États-Unis'),
('ET','Éthiopie'),
('FI','Finlande'),
('FR','France'),
('GE','Géorgie'),
('GA','Gabon'),
('GM','Gambie'),
('GH','Ghana'),
('GI','Gibraltar'),
('GR','Grèce'),
('GD','Grenade'),
('GL','Groenland'),
('GP','Guadeloupe'),
('GU','Guam'),
('GT','Guatemala'),
('GN','Guinée'),
('GQ','Guinée équatoriale'),
('GW','Guinée-Bissao'),
('GY','Guyana'),
('GF','Guyane française'),
('HT','Haïti'),
('HN','Honduras'),
('HK','Hong Kong'),
('HU','Hongrie'),
('BV','Ile Bouvet'),
('CX','Ile Christmas'),
('NF','Ile Norfolk'),
('KY','Iles Cayman'),
('CK','Iles Cook'),
('FO','Iles Féroé'),
('FK','Iles Falkland'),
('FJ','Iles Fidji'),
('GS','Iles Géorgie du Sud et Sandwich du Sud'),
('HM','Iles Heard et McDonald'),
('MH','Iles Marshall'),
('PN','Iles Pitcairn'),
('SB','Iles Salomon'),
('SJ','Iles Svalbard et Jan Mayen'),
('TC','Iles Turks-et-Caicos'),
('VI','Iles Vierges américaines'),
('VG','Iles Vierges britanniques'),
('CC','Iles des Cocos (Keeling),'),
('UM','Iles mineures éloignées des États-Unis'),
('IN','Inde'),
('ID','Indonésie'),
('IR','Iran'),
('IQ','Iraq'),
('IE','Irlande'),
('IS','Islande'),
('IL','Israël'),
('IT','Italie'),
('JM','Jamaïque'),
('JP','Japon'),
('JO','Jordanie'),
('KZ','Kazakhstan'),
('KE','Kenya'),
('KG','Kirghizistan'),
('KI','Kiribati'),
('KW','Koweït'),
('LA','Laos'),
('LS','Lesotho'),
('LV','Lettonie'),
('LB','Liban'),
('LR','Liberia'),
('LY','Libye'),
('LI','Liechtenstein'),
('LT','Lituanie'),
('LU','Luxembourg'),
('MO','Macao'),
('MG','Madagascar'),
('MY','Malaisie'),
('MW','Malawi'),
('MV','Maldives'),
('ML','Mali'),
('MT','Malte'),
('MP','Mariannes du Nord'),
('MA','Maroc'),
('MQ','Martinique'),
('MU','Maurice'),
('MR','Mauritanie'),
('YT','Mayotte'),
('MX','Mexique'),
('FM','Micronésie'),
('MD','Moldavie'),
('MC','Monaco'),
('MN','Mongolie'),
('MS','Montserrat'),
('MZ','Mozambique'),
('NP','Népal'),
('NA','Namibie'),
('NR','Nauru'),
('NI','Nicaragua'),
('NE','Niger'),
('NG','Nigeria'),
('NU','Nioué'),
('NO','Norvège'),
('NC','Nouvelle-Calédonie'),
('NZ','Nouvelle-Zélande'),
('OM','Oman'),
('UG','Ouganda'),
('UZ','Ouzbékistan'),
('PE','Pérou'),
('PK','Pakistan'),
('PA','Panama'),
('PG','Papouasie-Nouvelle-Guinée'),
('PY','Paraguay'),
('NL','Pays-Bas'),
('PH','Philippines'),
('PL','Pologne'),
('PF','Polynésie française'),
('PR','Porto Rico'),
('PT','Portugal'),
('QA','Qatar'),
('CF','République centrafricaine'),
('CD','République démocratique du Congo'),
('DO','République dominicaine'),
('CZ','République tchèque'),
('RE','Réunion'),
('RO','Roumanie'),
('GB','Royaume-Uni'),
('RU','Russie'),
('RW','Rwanda'),
('SN','Sénégal'),
('EH','Sahara occidental'),
('KN','Saint-Christophe-et-Niévès'),
('SM','Saint-Marin'),
('PM','Saint-Pierre-et-Miquelon'),
('VA','Saint-Siège' ),
('VC','Saint-Vincent-et-les-Grenadines'),
('SH','Sainte-Hélène'),
('LC','Sainte-Lucie'),
('SV','Salvador'),
('WS','Samoa'),
('AS','Samoa américaines'),
('ST','Sao Tomé-et-Principe'),
('SC','Seychelles'),
('SL','Sierra Leone'),
('SG','Singapour'),
('SI','Slovénie'),
('SK','Slovaquie'),
('SO','Somalie'),
('SD','Soudan'),
('LK','Sri Lanka'),
('SE','Suède'),
('CH','Suisse'),
('SR','Suriname'),
('SZ','Swaziland'),
('SY','Syrie'),
('TW','Taïwan'),
('TJ','Tadjikistan'),
('TZ','Tanzanie'),
('TD','Tchad'),
('TF','Terres australes françaises'),
('IO','Territoire britannique Océan Indien'),
('TH','Thaïlande'),
('TL','Timor Oriental'),
('TG','Togo'),
('TK','Tokélaou'),
('TO','Tonga'),
('TT','Trinité-et-Tobago'),
('TN','Tunisie'),
('TM','Turkménistan'),
('TR','Turquie'),
('TV','Tuvalu'),
('UA','Ukraine'),
('UY','Uruguay'),
('VU','Vanuatu'),
('VE','Venezuela'),
('VN','Viêt Nam'),
('WF','Wallis-et-Futuna'),
('YE','Yémen'),
('YU','Yougoslavie'),
('ZM','Zambie'),
('ZW','Zimbabwe'),
('MK','ex-République yougoslave de Macédoine'),
)

# Create my Form model

class BirthCertificate(models.Model) :

    rowid = models.AutoField(primary_key=True)
    nom = models.CharField('Nom', max_length=30, null=False)   # Lastname
    prenom = models.CharField('Prénom', max_length=30, null = False)   # Firstname
    sexe = models.CharField('Sexe', max_length=1, choices = CHOIX_SEXE)  # Choice between 'M' or 'F'
    birthday = models.DateField('Date de naissance', null=False)
    birthhour = models.TimeField('heure de naissance', null=False)
    birthcity = models.CharField('Ville de naissance', max_length = 30, null=False)
    birthcountry = models.CharField('Pays de naissance', max_length=2, choices= CHOIX_PAYS)

    nom_pere = models.CharField('Nom père', max_length=30, null=False)
    prenom_pere = models.CharField('Prénom père', max_length=30, null=False)
    birthday_pere = models.DateField('Date de naissance du père', null=False)
    birthcity_pere = models.CharField('Ville de naissance du père', max_length=30, null=False)
    birthcountry_pere = models.CharField('Pays de naissance du père', max_length=2, choices= CHOIX_PAYS)
    job_pere = models.CharField('Profession du père', max_length=30, null=False)
    adress_pere = models.CharField('Adresse du père', max_length=40, null=False)
    ville_pere = models.CharField('Ville du père', max_length=30, null=False)
    zip_pere = models.IntegerField('Code Postal du père', null=False)
    pays_pere = models.CharField('Pays du père', max_length=2, choices= CHOIX_PAYS)

    nom_mere = models.CharField('Nom mère', max_length=30, null=False)
    prenom_mere = models.CharField('Prénom mère', max_length=30, null=False)
    birthday_mere = models.DateField('Date de naissance de la mère', null=False)
    birthcity_mere = models.CharField('Ville de naissance de la mère', max_length=30, null=False)
    birthcountry_mere = models.CharField('Pays de naissance de la mère', max_length=2, choices= CHOIX_PAYS)
    job_mere = models.CharField('Profession de la mère', max_length=30, null=False)
    adress_mere = models.CharField('Adresse de la mère', max_length=40, null=False)
    ville_mere = models.CharField('Ville de la mère', max_length=30, null=False)
    zip_mere = models.IntegerField('Code Postal de la mère', null=False)
    pays_mere = models.CharField('Pays de la mère', max_length=2, choices= CHOIX_PAYS)

    nom_temoin1 = models.CharField('Nom témoin n°1', max_length=30, null=False)
    prenom_temoin1 = models.CharField('Prénom témoin n°1', max_length=30, null=False)
    birthday_temoin1 = models.DateField('Date de naissance du témoin n°1', null=False)
    birthcity_temoin1 = models.CharField('Ville de naissance du témoin n°1', max_length=30, null=False)

    nom_temoin2 = models.CharField('Nom témoin n°2', max_length=30, null=False)
    prenom_temoin2 = models.CharField('Prénom témoin n°2', max_length=30, null=False)
    birthday_temoin2 = models.DateField('Date de naissance du témoin n°2', null=False)
    birthcity_temoin2 = models.CharField('Ville de naissance du témoin n°2', max_length=30, null=False)

    def __str__(self):
        return self.nom
        return self.prenom
        return self.sexe
我假设我需要创建一个python文件,编写国家列表以及如何在我的models.py中调用该列表

非常感谢你

附言:

1) 如果你发现了一些错误,因为我开始学习Django,你可以告诉我在哪里,我会纠正它们;)


2) 如果我想将表单分块,它在models.py或html中?

我同意@Alasdair answer,他的解决方案是正确的,但我还想注意,系统范围内的常量最好存储在主应用程序文件夹(靠近
settings.py
)或(如果看起来像设置变量)设置中,通过
settings.py将其包括在内,如下所示:

此外,我想建议在国家/地区列表中使用此软件包:

在这里,这段代码总是返回第一行,所以您需要删除另外两行:

 def __str__(self):
    return self.nom
    return self.prenom
    return self.sexe

我同意@Alasdair answer,他的解决方案是正确的,但我还想注意,系统范围内的常量最好存储在主应用程序文件夹(靠近
settings.py
)或(如果它看起来像设置变量)设置中,通过
settings.py
将其包括在内,如下所示:

此外,我想建议在国家/地区列表中使用此软件包:

在这里,这段代码总是返回第一行,所以您需要删除另外两行:

 def __str__(self):
    return self.nom
    return self.prenom
    return self.sexe

在与您的
models.py
相同的目录中创建一个
countries.py

# yourapp/countries.py
CHOIX_PAYS = (
    ('AFG','Afghanistan'),
    ('AF','Afghanistan'),
    ...
)
然后在您的
models.py
中,导入
CHOIX\u PAYS

# yourapp/models.py
from .countries import CHOIX_PAYS

在与您的
models.py
相同的目录中创建一个
countries.py

# yourapp/countries.py
CHOIX_PAYS = (
    ('AFG','Afghanistan'),
    ('AF','Afghanistan'),
    ...
)
然后在您的
models.py
中,导入
CHOIX\u PAYS

# yourapp/models.py
from .countries import CHOIX_PAYS

你有一个更大的问题。您需要规范化模型。对于
CharField()
使用
blank=True
而不是
null=True
。2勺Django对何时使用null和blank@e4c5正如我所说,我被Django困住了。我必须规范化,这到底是什么?你所问的更多的是代码审查,因此这个问题应该在代码审查而不是堆栈溢出时提出。@evans_murithi好的,谢谢你的建议!这是学习的好方法;)你有一个更大的问题。您需要规范化模型。对于
CharField()
使用
blank=True
而不是
null=True
。2勺Django对何时使用null和blank@e4c5正如我所说,我被Django困住了。我必须规范化,这到底是什么?你所问的更多的是代码审查,因此这个问题应该在代码审查而不是堆栈溢出时提出。@evans_murithi好的,谢谢你的建议!这是学习的好方法;)我不确定这是否是最好的解决方法,因为用这种方法,常量位于特定的应用程序文件夹下,并由每个应用程序锁定,我认为这是不正确的。如果常量覆盖所有应用程序并存储在一个地方,我认为这是一个好方法。将文件放在
yourapp/countries
只是一个建议,我同意可能有更好的地方存放它。我不同意这样“锁定”应用程序中的设置。应用程序可以相互导入值。这个答案让OP启动并运行,他们可以随时在以后更改它。就个人而言,我不会将国家列表放在
settings.py
中,对我来说,这不像是每个项目的设置。我的意思是在设计案例中“锁定”,因为您需要从app\u name导入。关于应用程序级别下的存储国家/地区,我可能同意您的看法,这取决于开发人员,但例如,应用程序范围内的线程数或其他内容,最好存储在更深的级别。不确定这是否是最佳解决方法,因为这样一来,常量位于特定应用程序文件夹下,并由每个应用程序锁定,我认为这是不对的。如果常量覆盖所有应用程序并存储在一个地方,我认为这是一个好方法。将文件放在
yourapp/countries
只是一个建议,我同意可能有更好的地方存放它。我不同意这样“锁定”应用程序中的设置。应用程序可以相互导入值。这个答案让OP启动并运行,他们可以随时在以后更改它。就个人而言,我不会将国家列表放在
settings.py
中,对我来说,这不像是每个项目的设置。我的意思是在设计案例中“锁定”,因为您需要从app\u name导入。关于应用程序级别下的存储国家,我可能同意您的看法,这取决于开发人员,但例如,应用程序范围内的线程数或其他东西,最好在更深层次上存储。