python - Django 不创建模型字段

标签 python mysql django

从我的角度来看,我遇到了一个非常奇怪的问题,我想引起你的注意。

我正在构建一个 Django 网站,我想用他的 models.py 文件创建一个新应用。

我将此脚本写入我的 Mairie 模型应用程序:

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

from django.db import models
from django.utils.encoding import force_text
from django_countries.fields import CountryField

###############################################
# Choix à l'utilisateur pour le sexe du maire #
###############################################

SEX_CHOICES = (
    ('Masculin', 'Masculin'),
    ('Feminin', 'Féminin')
)

TITLE_CHOICES = (
    ('Mr', 'Monsieur'),
    ('Mlle', 'Mademoiselle'),
    ('Mme','Madame'),
    ('Dr','Docteur'),
    ('Me','Maître'),
)

INSTITUTION_CHOICES = (
    ('Mairie','Mairie'),
    ('Prefecture','Préfécture'),
    ('Autre','Autre')
)

DEVISE_CHOICES = (
    ('EUR','EUR (€)'),
    ('USD','USD ($)'),
    ('CFA','CFA')
)

MANDAT_CHOICES = (
    ('2011','2011'),
    ('2012','2012'),
    ('2013','2013'),
    ('2014','2014'),
    ('2015','2015'),
    ('2016','2016'),
    ('2017','2017'),
    ('2018','2018'),
    ('2019','2019'),
    ('2020','2020'),
    ('2021','2021'),
    ('2022','2022'),
    ('2023','2023'),
    ('2024','2024'),
    ('2025','2025'),
    ('2026','2026'),
    ('2027','2027'),
    ('2028','2028'),
    ('2029','2029'),
    ('2030','2030'),
    ('2031','2031')
)

####################################################################################
#           Création d'une table permettant de renseigner toutes les               #
#                 informations concernant la mairie et le maire                    #
####################################################################################

class Mairie(models.Model):

    institution = models.CharField(max_length=30, choices=INSTITUTION_CHOICES, null=False, verbose_name='Nom/Enseigne/Raison Sociale')
    adress = models.CharField(max_length=30, null=False, verbose_name='Adresse')
    zip = models.IntegerField(verbose_name='Code Postal', null=False)
    city = models.CharField(max_length=30, verbose_name='Ville', null=False)
    country = CountryField(blank_label='Sélectionner un pays', verbose_name='Pays', null=False)
    department = models.CharField(max_length=30, verbose_name='Département/Canton')
    devise = models.CharField(max_length=30, choices=DEVISE_CHOICES, null=False, verbose_name='Devise')
    fixe = models.CharField(max_length=30, verbose_name='Téléphone Fixe', null=False)
    fax = models.CharField(max_length=30, verbose_name='Fax', blank=True)
    mail = models.CharField(max_length=40, verbose_name = 'Mail', null=False)
    web = models.CharField(max_length=40, verbose_name = 'Site Web')
    #logo = models.ImageField(upload_to='logo')

    title = models.CharField(max_length=12,choices=TITLE_CHOICES, verbose_name='Civilité du maire', null=False)
    lastname = models.CharField(max_length=30, verbose_name='Nom de famille du maire', null=False)
    firstname = models.CharField(max_length=30, verbose_name='Prénom(s) du maire', null=False)
    sex = models.CharField(max_length=8, choices=SEX_CHOICES, verbose_name='Sexe du maire', null=False)
    mandat1 = models.CharField(max_length=8, choices=MANDAT_CHOICES, verbose_name='Début du mandat', null=False)
    mandat2 = models.CharField(max_length=8, choices=MANDAT_CHOICES, verbose_name='Fin du mandat', null=False)

但是,最后两个字段(mandat1 和 mandat2)不会迁移到我的 MySQL 数据库。这很奇怪,因为前面的字段(性别)写的完全一样,但效果很好。

我得到了这个错误:

Exception Value: (1054, "Unknown column 'mandat1' in 'field list'")

为了迁移我的 models.py 文件,我写道:

python manage.py makemigrations
python manage.py migrate

我正在使用 Django 1.10

你有想法吗?

添加的文件

我的迁移文件如下所示:

# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2017-01-26 10:43
from __future__ import unicode_literals

from django.db import migrations, models
import django_countries.fields


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Mairie',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('institution', models.CharField(choices=[(b'Mairie', b'Mairie'), (b'Prefecture', b'Pr\xc3\xa9f\xc3\xa9cture'), (b'Autre', b'Autre')], max_length=30, verbose_name=b'Nom/Enseigne/Raison Sociale')),
                ('adress', models.CharField(max_length=30, verbose_name=b'Adresse')),
                ('zip', models.IntegerField(verbose_name=b'Code Postal')),
                ('city', models.CharField(max_length=30, verbose_name=b'Ville')),
                ('country', django_countries.fields.CountryField(max_length=2, verbose_name=b'Pays')),
                ('department', models.CharField(max_length=30, verbose_name=b'D\xc3\xa9partement/Canton')),
                ('devise', models.CharField(choices=[(b'EUR', b'EUR (\xe2\x82\xac)'), (b'USD', b'USD ($)'), (b'CFA', b'CFA')], max_length=30, verbose_name=b'Devise')),
                ('fixe', models.CharField(max_length=30, verbose_name=b'T\xc3\xa9l\xc3\xa9phone Fixe')),
                ('fax', models.CharField(blank=True, max_length=30, verbose_name=b'Fax')),
                ('mail', models.CharField(max_length=40, verbose_name=b'Mail')),
                ('web', models.CharField(max_length=40, verbose_name=b'Site Web')),
                ('title', models.CharField(choices=[(b'Mr', b'Monsieur'), (b'Mlle', b'Mademoiselle'), (b'Mme', b'Madame'), (b'Dr', b'Docteur'), (b'Me', b'Ma\xc3\xaetre')], max_length=12, verbose_name=b'Civilit\xc3\xa9 du maire')),
                ('lastname', models.CharField(max_length=30, verbose_name=b'Nom de famille du maire')),
                ('firstname', models.CharField(max_length=30, verbose_name=b'Pr\xc3\xa9nom(s) du maire')),
                ('sex', models.CharField(choices=[(b'Masculin', b'Masculin'), (b'Feminin', b'F\xc3\xa9minin')], max_length=8, verbose_name=b'Sexe du maire')),
                ('mandat1', models.CharField(choices=[(b'2011', b'2011'), (b'2012', b'2012'), (b'2013', b'2013'), (b'2014', b'2014'), (b'2015', b'2015'), (b'2016', b'2016'), (b'2017', b'2017'), (b'2018', b'2018'), (b'2019', b'2019'), (b'2020', b'2020'), (b'2021', b'2021'), (b'2022', b'2022'), (b'2023', b'2023'), (b'2024', b'2024'), (b'2025', b'2025'), (b'2026', b'2026'), (b'2027', b'2027'), (b'2028', b'2028'), (b'2029', b'2029'), (b'2030', b'2030'), (b'2031', b'2031')], max_length=8, verbose_name=b'D\xc3\xa9but du mandat')),
                ('mandat2', models.CharField(choices=[(b'2011', b'2011'), (b'2012', b'2012'), (b'2013', b'2013'), (b'2014', b'2014'), (b'2015', b'2015'), (b'2016', b'2016'), (b'2017', b'2017'), (b'2018', b'2018'), (b'2019', b'2019'), (b'2020', b'2020'), (b'2021', b'2021'), (b'2022', b'2022'), (b'2023', b'2023'), (b'2024', b'2024'), (b'2025', b'2025'), (b'2026', b'2026'), (b'2027', b'2027'), (b'2028', b'2028'), (b'2029', b'2029'), (b'2030', b'2030'), (b'2031', b'2031')], max_length=8, verbose_name=b'Fin du mandat')),
            ],
        ),
    ]

命令:python manage.py showmigrations 看起来像:

MacBook-Pro-de-Valentin:Etat_civil valentinjungbluth$ python manage.py showmigrations
System check identified some issues:

WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.
BirthCertificate
 [X] 0001_initial
Identity
 [X] 0001_initial
Mairie
 [X] 0001_initial
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
captcha
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
log
 [X] 0001_initial
sessions
 [X] 0001_initial

最佳答案

您的迁移和模型不同步。我的猜测是您使用未创建字段的 0001_initial 迁移的早期版本进行了迁移。

如果数据库中没有 Mairie 应用程序的重要数据,您可以还原迁移,然后重新运行。 警告 - 这将删除 Mairie 应用程序数据库表中的所有数据。如果其他应用程序具有应用程序中模型的外键,您可能不应该使用它

python manage.py migrate Mairie zero
python manage.py migrate Mairie

如果数据库中有您不能使用的重要数据,那么您可以:

  • 从迁移文件中删除缺失的字段,然后再次运行 makemigrationsmigrate
  • 手动将字段添加到您的数据库(sqlmigrate 命令可能有所帮助)

关于python - Django 不创建模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871836/

相关文章:

python - 下拉列表更改后来自模板的 Django AJAX 调用/url

python - GUI 程序的日志记录策略

Python line_profiler 找不到模块

python - 如何传递 docopt 参数,其中参数是 python 中带空格的字符串

php - WooCommerce 将图像添加到类别循环

mysql - 如何在 Mysqli 查询中将行转换为列

python - 为什么 Fabric 显示与服务器断开连接的消息将近 2 分钟?

php - Mysql 选择大于某个日期时间的所有记录

python - 为什么批量导入不起作用,但单独导入定义却有效?

django - 我可以在Django模型上至少要求一个字段吗?