2015-11-12 15 views
5

Gặp sự cố khi loại bỏ lỗi này.giá trị rỗng trong cột "last_login" vi phạm ràng buộc không null

Tôi đang cố gắng sử dụng Digital Ocean để triển khai ứng dụng Django của mình. Tôi đã cấu hình Postgres, nhưng khi tôi đang cố gắng đăng ký một người dùng mới trong ứng dụng của tôi, tôi nhận được vấn đề này.

Tôi đã thử chạy python manage.py makemigrationspython manage.py migrate và chúng hoạt động tốt. Việc di chuyển SQL được hoàn tất khi di chuyển.

+0

Bạn đang cố gắng thêm người dùng nói trên như thế nào? Thông qua ngăn quản trị hoặc cách cụ thể của bạn? Bạn đang chạy phiên bản Django nào? –

+0

cố gắng đăng ký người dùng trong một mẫu django vì vậy tôi có các trường nhập biểu mẫu và khi tôi gửi biểu mẫu, views.py xóa nó và lưu vào db. phiên bản của tôi là 1.8.6 – noobprogrammer

+0

Thử thêm 'từ django.utils múi giờ nhập khẩu' và bất cứ nơi nào bạn lấy dữ liệu' người dùng' để lưu 'người dùng' mới trước khi lưu thủ tục' .last_login = timezone.now() ' –

Trả lời

5

Hãy thử thêm video này vào nhập khẩu của bạn:

from django.utils import timezone 

Sau đó, bất cứ nơi nào bạn lấy dữ liệu 's user để save mới user thêm trước khi các thủ tục save:

<user_object>.last_login = timezone.now() 
+0

Có lý do nào khiến chúng ta không thể sử dụng giá trị null cho trường' last_login' không? Theo tài liệu phát hành Django 1.8, chúng ta sẽ có thể sử dụng giá trị null cho trường 'last_login' của mô hình AbstractUser của Django: https://docs.djangoproject.com/en/1.8/releases/1.8/#abstractuser-last- login-allow-null-values ​​Nhưng tôi đã nhận được lỗi "not-null constraint" khi 'last_login' không được định nghĩa, điều này có ý nghĩa đối với Django 1.7, nhưng không phải cho 1.8 – modulitos

+0

Nếu bạn chưa chạy các di chuyển mới từ gói 'django.contrib.auth' đi kèm với bản phân phối 1.8+ thì công việc hack này được đảm bảo hoạt động trong hầu hết các trường hợp. Tôi cảm thấy rằng có xác thực cấp cơ sở dữ liệu được thay đổi với [di chuyển 0005] (https://github.com/django/django/blob/master/django/contrib/auth/migrations/0005_alter_user_last_login_null.py). –

+0

Ah vâng, bạn nói đúng. Tôi đã có thể gỡ rối điều này bằng cách truy cập dấu nhắc psql và chạy '\ d auth_user' (trong trường hợp của tôi,' auth_user' là tên 'db_table' cho AUTH_USER_MODEL của tôi), cho thấy' last_login' không phải là nullable. Sau đó, và chạy './manage.py showmigrations --list', tôi nhận ra rằng việc di chuyển của tôi đã được áp dụng không chính xác. – modulitos

3

tôi đã nâng cấp từ django 1,7 đến django 1,10 khi tôi gặp phải điều này. Những gì nó đã kết thúc được là tôi cần thiết để chạy python manage.py migrate để cập nhật các bảng cơ sở dữ liệu và cột.

+0

Đây là câu trả lời đúng cho tôi! – martincho

+0

Woo! Có người đọc câu trả lời của tôi! Vui mừng nó cũng làm việc cho bạn! – teewuane

+0

Câu trả lời ngắn nhưng có nhiều lợi ích, cảm ơn bạn –

Các vấn đề liên quan