django模型4

一对一关系

 

通过使用OneToOneField,可以定义模型的一对一关系。它的使用方法和定义其它类型的字段是一样的:把它作为模型的一个属性。

对于一个对象通过某种方式“扩展”了另一个对象的情况,这是极为有用的定义一个对象的方法。

定义一对一字段需要通过一个位置参数:与模型关联的类。

例如,如果你打算创建一个用于描述“地址”的数据库表,你可能让它恰当地包括地址、电话号码等等。然后,如果你打算在“地址”数据库表的基础上创建一个饭店数据库表,你可能会利用饭店与“地址”之间的一对一关系,而不是重复地复制地址表中的内容到饭店表中(因为饭店也是一个地址;事实上,处理这类情况典型的方法是使用继承,也即隐式地包含了一个一对一关系)。

与定义外键一样,定义一个递归关系是允许的,同样允许定义一个到尚未建立的模型的关系;更多细节请查看模型字段参考。

一对一字段也可以接受一个可选参考,更多细节请查看模型字段参考。

过去的版本中,一对一字段会被自动转换成模型的主键。现在不是这样了(尽管你可以通过传递primary_key参数手工设定,如果你想要这样做)。也就是说,现在你可以在一个模型中设置多个一对一类型字段。

 

跨文件模型

要关系位于另外一个应用中的模型是绝对允许的。要做到这一点,只需在模型类的顶部将要关联的模型导入即可。然后,在需要的地方指向导入的模型类就可以了。例如:

from mysite.geography.models import ZipCode

 

class Restaurant(models.Model):

    # ...

zip_code = models.ForeignKey(ZipCode)

 

字段命名规则

关于Django字段命名,只需注意以下两点:

1.字段名不能使用Python保留字,因为那样做的话将会导致语法。例如:

class Example(models.Model):

pass = models.IntegerField()    # 'pass' 是一个保留字

2.字段名不能包含相连的多个下划线,这是因为它与Django的查询语法有冲突。例如:

class Example(models.Model):

foo__bar = models.IntegerField()    # 'foo__bar'有两个下划线!

尽管有了这些限制,Django在字段命名方面仍然运作良好,因为数据库表的列名不一定非得和字段名(译者注:类的域名)保持一致。查看db_column选项了解更多细节。

由于在底层的SQL查询中,Django分离了所有的数据库表名和列名,所以SQL的保留字,像join,where和select等是允许做为字段名的。在实际的数据库引擎中使用的是引用语法。

 

定制字段类型

如果现有的任何一个字段类型都不能满足你的需要,或者你想要使用某些不太常见的字段类型,你可以创建你自己的字段类型。关于定制自己的字段在创建自定义模型字段一节有完整描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值