我想通过 Django 在数据库中保存电话号码(美国)。我有
from django.db import models
class Number(models.Model):
phone_number = models.CharField("Phone Number", max_length=10, unique=True)
当我跑的时候:
python manage.py sql myapp
我有
BEGIN;
CREATE TABLE `demo_number` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`phone_number` varchar(10) NOT NULL UNIQUE
)
;
当我验证它时,没有错误。
python manage.py validate
0 errors found
所以我做了
python manage.py syncdb
在 MySQL 控制台中,我看到:
mysql> select * from myapp_number;
Empty set (0.00 sec)
mysql> describe myapp_number;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| phone_number | varchar(10) | NO | UNI | NULL | |
+--------------+-------------+------+-----+---------+----------------+
2 行(0.03 秒)`
然后在python manage.py shell
,我做
from demo.models import Message, Number, Relationship, SmsLog
n=Number(phone_number='1234567890')
n.save()
当我再次检查 MySQL 控制台时,我看到:
mysql> select * from myapp_number;
+------------+--------------+
| id | phone_number |
+------------+--------------+
| 2147483647 | 1234567890 |
+------------+--------------+
1 row in set (0.01 sec)
为什么是id
一个大数字?事实上,正因为如此,我不能再插入电话号码了。例如,在python manage.py shell
n=Number(phone_number='0987654321')
n.save()
IntegrityError: (1062, "Duplicate entry '2147483647' for key 'PRIMARY'")
我是 Django 新手(使用 Django 1.5 和 MySQL 服务器版本:5.1.63)。如果有人能指出我所犯的明显错误,我将不胜感激。附带说明一下,如果我想将 15 扩展max_length
到CharField
15,那么实现这一目标的最简单和最干净(即不搞砸现有设置)的方法是什么?谢谢你。