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 对应