2015-03-25 3 views
0

Я следую за учебником Effective Django с изменением использования MySql вместо sqlite3. После official recommendation Django и учитывая, что я работаю с Python3.4, я использую драйвер mysqlclient. я создал следующую модель, как указано в руководстве:Django: Автоматическое назначение первичного ключа в MySql failing

class Contact(models.Model): 

    fName = models.CharField(max_length = 30) 
    lName = models.CharField(max_length = 100) 
    eMail = models.EmailField() 

    def str(self): 
     return ' '.join([self.fName, self.lName]) 

дБ имеет синхронизированы (мигрировали) ok.Nonetheless, при создании через оболочку контакт

a = Contact('John', 'Doe') 

, а затем сохранить его

a.save() 

Я получаю следующее сообщение об ошибке:

ValueError: invalid literal for int() with base 10: 'John' 

который не появляется, когда я обеспечиваю явное целое число (принимается в качестве первичного ключа ???) в качестве первого аргумента

a = Contact(1, 'John', 'Doe') 

Почему не автоматическое назначение рк работает должным образом?

Я использую Django 1.7.7/Python 3.4 на virtualenv Вот настройки:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'addressbook', 
     'USER': 'abuser', 
     'PASSWORD': '1234', 
     'HOST': 'localhost', 
     'PORT': '3306', 
} 

}

обидчик был предоставлен все привилегии с опцией грантов на Addressbook (а также на test_addressbook) дб

ответ

3

Чтобы создать экземпляр модели вы должны использовать ключевые аргументы вместо позиционные:

a = Contact(fName='John', lName='Doe') 
a.save() 
Смежные вопросы