文章目录
数据库表关联关系映射
一对一映射
- 定义model:一个人对应一个身份证
class UserProfile(models.Model):
name = models.CharField(max_length=16, verbose_name='用户名')
class Meta:
db_table = 'UserProfile'
verbose_name = '用户'
verbose_name_plural = verbose_name
def __str__(self):
return '%s' % (self.name)
class IDCard(models.Model):
id_card = models.CharField(max_length=18, verbose_name='身份证号')
user = models.OneToOneField(UserProfile, unique=True, on_delete=models.CASCADE)
class Meta:
db_table = 'IDCard'
verbose_name = '身份证号'
verbose_name_plural = verbose_name
def __str__(self):
return '%s' % (self.id_card)
- 新增数据
用户 | 身份证号 |
---|---|
张三 | 11111111111 |
李四 | 2222222222 |
王五 | 33333333 |
赵六 |
names = ['张三', '李四', '王五']
for name in names:
user = UserProfile(name=name)
user.save()
id_cards = ['111111111111111', '222222222222222', '333333333333333']
for i in range(0, 3):
#新增数据有两种方式
#方式一:字段名=对象
#方式二:字段名_id = 对象id
idcard = IDCard(id_card=id_cards[i], user_id=i+1) # 方式二
idcard.save()
-
查询数据
正向查询
:直接通过关联属性查出(通过外键的查询无外键的) ----通过自身对应的对象查
id1 = '111111111111111' user = IDCard.objects.get(id_card=id1).user print(user)
反向查询
:通过反向关联属性查询(无外键的查询有外键的) ----通过关联的外键对象