我正在关注Effective Django教程,更改了使用MySql而不是sqlite3。 在Django的official recommendation之后,鉴于我正在使用Python3.4,我正在使用mysqlclient驱动程序。 我已经创建了以下模型,如教程中所示:
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])
db已同步(已迁移)ok。但是,通过shell创建联系人时
a = Contact('John', 'Doe')
然后保存
a.save()
我收到以下错误:
ValueError: invalid literal for int() with base 10: 'John'
当我提供显式整数(作为主键???)作为第一个参数
时,它不会出现a = Contact(1, 'John', 'Doe')
为什么自动pk分配不能正常工作?
我在virtualenv上使用Django 1.7.7 / Python 3.4 以下是设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'addressbook',
'USER': 'abuser',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': '3306',
}
}
abuser已被授予地址簿上具有grant选项的所有权限(同样在test_addressbook上)db
答案 0 :(得分:3)
要创建模型实例,您应该使用关键字参数而不是位置:
a = Contact(fName='John', lName='Doe')
a.save()