django 中 1对1模型的用法

用法

1对1的使用场景为 从表 的 每一组 数据必须 和主表的每一条数据进行匹配,从表中不能多次匹配 或 匹配 主表中不存在的数据,比如法律规定每个丈夫只能有一个妻子,每个妻子也只能有一个丈夫

模型示例

为了增加模型的可读性,此处模型我将尽量简化

#创建 主表--丈夫表
class Husband(models.Model):
  name=models.CharField(
    max_length=30)

#创建 从表--妻子表 
class Wife(models.Model):
  name = models.CharField(max_length=30)
  #关联 Husband 模型,进行1对1映射
  author = models.OneToOneField(Husband)

同步回数据库,查看表结构

>>pyhton manage.py makemigrations
>>pyhton manage.py migrate

注意:work为我的app名,不用过多纠结此处

mysql> desc work_husband;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(30)  | NO   | UNI | NULL    |                
+----------+--------------+------+-----+---------+----------------+
desc work_wife;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| name      | varchar(30) | NO   |     | NULL    |                |
| husabnd_id | int(11)     | NO   | UNI | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

插入数据,进行使用测试

mysql> insert into work_husband values(null,"curry");
mysql> insert into work_husband values(null,"harden");

先在有 主表有 两条数据,我再在从表插入数据进行测试

mysql> insert into work_wife values(null,"james_wife",3);
ERROR 1136 (21S01): Column count doesn't match value count row 1

报错的原因是因为 author_id 关联的时 主表 主键 id字段,此时 主表 id 字段只有 数据 1 和 2 ,所以插入数据会进行报错;

下面 在从表中 插入 husabnd_id相同的两组数据,查看结果

mysql> insert into work_wife values(null,"harden_wife",2);
Query OK, 1 row affected (0.08 sec)
mysql> insert into work_wife values(null,"harden_wife1",2);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

报错原因为 上面已经说过了,或者我们可以再简单的将它总结下,author字段为唯一值,且只能和 主表的主键 进行 1 1 对应

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值