058:表关系之一对一
Posted carlos-li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了058:表关系之一对一相关的知识,希望对你有一定的参考价值。
表关系之一对一应用场景:
比如一个用户表和一个用户信息表。在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的。如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做UserInfo。但是用户表User和用户信息表UserInfo就是典型的一对一了。
实例代码如下:
# models.py文件内容: class User(models.Model): username = models.CharField(max_length=100) def __str__(self): return "<User: ID:%s, username:%s>" % (self.id, self.username) class UserInfo(models.Model): addr = models.CharField(max_length=200) user = models.OneToOneField("User", on_delete=models.CASCADE) def __str__(self): return "<UserInfo: ID:%s, addr:%s, user_id:%s>" % (self.id, self.addr, self.user.id) # 注意这里的数据库中user_id的书写格式 # views.py文件内容: def index(request): user = User.objects.first() # userinfo = UserInfo(addr="nanjing") # userinfo.user = user # userinfo.save() print(user.userinfo) # 通过User模型获取UserInfo模型中的数据 return HttpResponse("success")
如果不想使用通过User模型获取UserInfo模型中的数据,可以使用上节中的方式;实例代码如下:
# models.py文件内容: class User(models.Model): username = models.CharField(max_length=100) def __str__(self): return "<User: ID:%s, username:%s>" % (self.id, self.username) class UserInfo(models.Model): addr = models.CharField(max_length=200) user = models.OneToOneField("User", on_delete=models.CASCADE, related_name="information") def __str__(self): return "<UserInfo: ID:%s, addr:%s, user_id:%s>" % (self.id, self.addr, self.user.id) # views.py文件内容: def index(request): user = User.objects.first() # userinfo = UserInfo(addr="nanjing") # userinfo.user = user # userinfo.save() # print(user.userinfo) print(user.information) # 这里的information和上面模型中的related_name="information"要对应 return HttpResponse("success")
以上是关于058:表关系之一对一的主要内容,如果未能解决你的问题,请参考以下文章