码迷,mamicode.com
首页 > 其他好文 > 详细

058:表关系之一对一

时间:2019-12-28 16:25:26      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:cad   response   style   request   objects   一个用户   文件内容   实例代码   return   

表关系之一对一应用场景:

  比如一个用户表和一个用户信息表。在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的。如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做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:表关系之一对一

标签:cad   response   style   request   objects   一个用户   文件内容   实例代码   return   

原文地址:https://www.cnblogs.com/Carlos-Li/p/12111702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!