2013-06-25 26 views
7

Mam proste pytanie: w moim modelu definiuję strukturę dla jednej z moich tabel; jednak chcę ustawić domyślną wartość dla Booleanfield: own, ale wydaje się, że nie działa poprawnie. Oto mój kod w modelu:Jaki jest sens "default = True" w BooleanField

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

Kiedy desc mój stół w mysql, to co mam (notatka że Własnych domyślne Null):

enter image description here

także gdy próbuję wykonać następujące czynności:

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

otrzymuję ten błąd:

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

P.S. Rozumiem, że używając NullBooleanField będę w stanie rozwiązać problem; jednak, o co chodzi z default, jeśli nie mogę wstawić wiersza, chyba że muszę podać wartość dla tego pola?

+0

Czy dodać domyślne po utworzeniu bazy danych/tabele? – mipadi

+0

@mipadi: Nie jestem pewien co to oznacza; ale przed uruchomieniem 'python manage.py syncdb' nie było tabeli' Books'! – Thuglife

+2

Właściwym testem jest 'book = Book ('1984'); book.save() ', a nie surowy SQL" INSERT ". Cały obiekt ORM nigdy nie musi pisać prostego kodu SQL. –

Odpowiedz

5

default nie jest obsługiwane na poziomie SQL - it's handled at the model level. W związku z tym surowe zapytanie SQL w środowisku db zwróci błąd. Spróbuj tego w swoim środowisku Django:

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

Kiedy odbywa się na poziomie modelu, wartość domyślna zostanie wstawiony do SQL DB

+0

Fair Kudos to @PaulaScardine do przygotowania przykładu w komentarzach. – JcKelley