首页 文章

修改max_length时,Django alterField不保留NOT NULL

提问于
浏览
3

我正在编写一个django迁移来将以下模型中CharField的max_length从200更改为255,但这样做会将这些字段从非可空变为可空 . 我希望这些字段保持不可为空 .

使用 sqlmigrate 我可以看到django为每次迁移运行的sql:

模型定义

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

from django.db import models


class Account(models.Model):
    # Would be added by Django default anyways.
    id = models.AutoField(primary_key=True)

    name = models.CharField(max_length=200)
    email = models.EmailField(max_length=200)
    password = models.CharField(max_length=200)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    last_seen_at = models.DateTimeField(auto_now_add=True)

    project_token = models.CharField(max_length=200)
    url = models.URLField(max_length=200)
    notification_emails = models.TextField(blank=True)

初始迁移0001

BEGIN;
    CREATE TABLE `pnmodels_account` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(200) NOT NULL, `email` varchar(200) NOT NULL, `password` varchar(200) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `last_seen_at` datetime NOT NULL, `project_token` varchar(200) NOT NULL, `url` varchar(200) NOT NULL, `notification_emails` longtext NOT NULL);

    COMMIT;

迁移0002将max_length更新为255

BEGIN;
    ALTER TABLE `pnmodels_account` MODIFY `email` varchar(255);
    ALTER TABLE `pnmodels_account` MODIFY `name` varchar(255);
    ALTER TABLE `pnmodels_account` MODIFY `password` varchar(255);
    ALTER TABLE `pnmodels_account` MODIFY `project_token` varchar(255);
    ALTER TABLE `pnmodels_account` MODIFY `url` varchar(255);

    COMMIT;

我认为0002中的 MODIFY 需要包含 NOT NULL . 这是一个django bug还是我错过了什么?

使用:Django == 1.7.7,mysqlclient == 1.3.6

1 回答

相关问题