2013-06-25 31 views
7

Tôi có một câu hỏi đơn giản: trong mô hình của mình, tôi xác định cấu trúc cho một trong các bảng của tôi; tuy nhiên, tôi muốn thiết lập giá trị mặc định cho Booleanfield: own nhưng có vẻ như không hoạt động đúng cách. Đây là mã của tôi trong mô hình:Điểm 'mặc định = True' là gì trong BooleanField

class Books(models.Model): 
    title = models.CharField(max_length=100) 
    own = models.BooleanField(default=True) 

Khi tôi desc bàn của tôi trong mysql, đây là những gì tôi nhận được (lưu ý rằng sở hữu có mặc định Null):

enter image description here

Ngoài ra, khi tôi cố gắng làm như sau:

INSERT INTO `counters_books` (`title`) VALUES ('My Brain is Open') 

Tôi gặp lỗi này:

ERROR 1364 (HY000): Field 'own' doesn't have a default value 

P.S. Tôi hiểu rằng bằng cách sử dụng NullBooleanField tôi sẽ có thể giải quyết vấn đề; tuy nhiên, điểm của default là gì nếu tôi không thể chèn hàng trừ khi tôi phải chỉ định giá trị cho trường đó?

+0

Bạn có thêm các mặc định sau khi tạo cơ sở dữ liệu/bảng? – mipadi

+0

@mipadi: Tôi không chắc điều đó có nghĩa là gì; nhưng không có bảng 'Sách' nào trước khi tôi chạy' python manage.py syncdb'! – Thuglife

+2

Bài kiểm tra đúng là 'book = Book (' 1984 '); book.save() ', không phải là một SQL thô" INSERT ". Toàn bộ điểm của ORM không bao giờ phải viết SQL thuần túy. –

Trả lời

5

default không được xử lý ở cấp SQL - it's handled at the model level. Do đó, một truy vấn SQL thô trong môi trường db của bạn sẽ ném một lỗi. Hãy thử điều này trong môi trường Django của bạn:

>> book_obj = Book('Harry Potter') 
>> book_obj.save() 

Khi thực hiện ở cấp mô hình, giá trị mặc định sẽ được chèn vào DB SQL của bạn

+0

Kudos hợp lý để @PaulaScardine để vẽ ví dụ đầu tiên trong các nhận xét. – JcKelley

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