Django:在MySql中自动分配主键失败

时间:2015-03-25 12:52:14

标签: python mysql django

我正在关注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

1 个答案:

答案 0 :(得分:3)

要创建模型实例,您应该使用关键字参数而不是位置:

a = Contact(fName='John', lName='Doe')
a.save()