是参照《Learning Website Developing with Django》里面的django_bookmarks一例照搬照抄下来的,问题出现在学习到为bookmarks应用建立数据库表的时候。这里涉及到三张表,第一张是User,用来存储用户信息;第二张是Link,用来存储网页的url;第三张是bookmarks,用来存储书签,书签除了id和书签名之外,还有两个指向User和Link的外键。按照书里面的指示在booksmark.models里插入以下内容:
from django import models
from django.contrib.auth.models import User
class Link(models.Model):
url = URLField(unique = True)
class Bookmarks(models.Model):
title = CharField(maxlength = 200)
user = ForeignKey(User)
link = ForeignKey(Link)
之后,“manage.py syncdb”将以上程序同步到数据库中,再使用“manage.py sqlall bookmarks”查看一下数据库中关于的bookmarks的表的建立情况。实际的输出与书本上的内容有一些差异,就是对于Link建立的外键,显示的结果只是一个非Null的Integer字段,没有“references”。
这里让人奇怪的一点是,既然没有建立外键,那么这个Integer的类型是怎么决定下来的?也许一种默认行为。这样的话,就很wired和 magic了。还有一种可能就是manag.py对与数据库构成的揭示是存在bug的,也就是说事实上这个外键是已经建立了,只不过没有被显示出来而已。所以使用标准sqlite3.exe,分析数据库bookmarksdb。
sqlite3 bookmarksdb
sqlie> .schema
在得到的结果中,果不其然,有
“link_id” integer NOT NULL REFERENCES “bookmarks_link” (“id”)