django-registration(1048,"Column'last_login'不能为null")

Sta*_*eez 6 python django django-registration django-1.9

我正在尝试在我的简单项目中使用django-registration.

settings.py

# DJANGO REGISTRATION
ACCOUNT_ACTIVATION_DAYS = 7
AUTH_USER_EMAIL_UNIQUE = True
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False
DEFAULT_FROM_EMAIL = 'example@gmail.com'
Run Code Online (Sandbox Code Playgroud)

urls.py

url(r'^accounts/', include('registration.backends.hmac.urls')),
Run Code Online (Sandbox Code Playgroud)

注册模板:

{% extends "index.html" %}
{% block content %}
<h1>Registration</h1>
<form method="post" action="">
    {% csrf_token %}
    <dl class="register">
    {% for field in form %}
        <dt>{{ field.label_tag }}</dt>
        <dd class="clearfix">{{ field }}
        {% if field.help_text %}<div class="clearfix">{{ field.help_text }}</div>{% endif %}
        {% if field.errors %}<div class="myerrors clearfix">{{ field.errors }}</div>{% endif %}
        </dd>
    {% endfor %}
    </dl>
<input type="submit" value="Sign Up"  class="clearfix">
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

当我要注册新用户时,我收到一个错误:

Django Version:     1.9c1
Exception Type:     IntegrityError
Exception Value:    (1048, "Column 'last_login' cannot be null")
Run Code Online (Sandbox Code Playgroud)

我不使用'CustomUser'模型.

Ala*_*air 9

确保您已运行auth应用程序的所有迁移.有一个迁移0005_alter_user_last_login_null.py使该last_login字段可选.

  • 迁移是在Django 1.8中添加的,所以它应该在从早期版本的Django升级时运行,即使你没有更改auth应用程序.如果Django已经认为已经应用了迁移,则可能需要手动删除非null约束. (2认同)

小智 5

转到您的数据库(MySQL终端):

$ mysql

mysql> SELECT * FROM django_migrations;

如果你看到一些记录,那很好.删除它们.

mysql> TRUNCATE TABLE django_migrations;

离开MySQL终端,再次在django中运行迁移:

$ python manage.py migrate --fake-initial

确保显示以下消息:

0005_alter_user_last_login_null - [OK]

然后你可能会看到其他一些冲突,这很好,因为我们只需要进行这种迁移.

重新启动你的MySQL和服务器,你很高兴.

  • 这是一个非常糟糕的建议。截断迁移表会导致各种问题。 (3认同)