2011年1月12日

django models 與 sql database 的對應

ref: http://www.djangoproject.com/documentation/models/custom_columns/

django 預設在建立 db schema 的時候
會把 table name 設成 {app_label}_{model_name},
然後 foreign key 的那個 column name 會幫你 append 一個 "_id",
另外如果你沒有指定 primary key,它也會幫你加一筆 "id"

比如說下面這個 model

class SiteInfo(models.Model):
    # data fileds
    Name = models.CharField(max_length=255)
    CategoryId = models.ForeignKey('SiteCategory', db_index=True)

會變成

CREATE TABLE `idsafe_testname` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `Name` varchar(255) NOT NULL,
    `CategoryId_id` integer NOT NULL
);
ALTER TABLE `idsafe_testname` ADD CONSTRAINT `CategoryId_id_refs_Id_14001db1` 
FOREIGN KEY (`CategoryId_id`) REFERENCES `sitecategory` (`Id`);

如果不喜歡這樣的話,可以自己指定:

class SiteInfo(models.Model):
    # data fileds
    Id = models.AutoField(primary_key=True)
    Name = models.CharField(max_length=255)
    CategoryId = models.ForeignKey('SiteCategory', db_column='CategoryId', 
                                   db_index=True)
    class Meta:
        db_table = 'siteinfo'

沒有留言:

張貼留言