假设有两张表,Role和User,因为多个用户会对应一个角色,属于多对一关系,所以User中的rolename字段使用ForeignKey,第一个参数为要关联的表Role,第二个参数related_name是用来反查这个角色下有几个用户时用的。

class Role(models.Model):
'''
角色表
'''
role_name = models.CharField(max_length=50)
create_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=10) def __str__(self):
return self.role_name class User(models.Model):
'''
用户信息表,用户表中role_name字段为ForeignKey意思为外键,代表多对一关系,多个用户对应一个角色
''' gender = (
('male', '男'),
('female', '女')
)
member_code = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=30)
password = models.CharField(max_length=256)
role_name = models.ForeignKey(Role, related_name='member_role', default=3)
email = models.EmailField(max_length=50)
sex = models.CharField(max_length=10, choices=gender, default='男')
create_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=10, default=1) def __str__(self):
return self.name

  

注意:

  虽然User表中字段名称叫role_name,但是由于它是外键,所以它在实际的表中字段名会自动加上_id叫role_name_id,字段的值为Role表中的主键id的值

需求:

  获取某个人对应的角色信息

  代码:获取membe_code为01010101的用户对应的角色名称

from account.models import User

def user():
user = User.objects.get(member_code='')
print user.role_name.role_name user()

  疑问:

    这里为什么要用user.role_name.role_name方式呢?

  解答:

    因为user.role_name,返回的是Role对象,所以需要再次.role_name获取对应的角色名称,同样想获得该角色的创建时间可以user.role_name.create_time

    但是因为Role模型有对象可读性代码

     def __str__(self):
  return self.role_name

    所以其实可以直接user.role_name直接获取该用户所属角色,但是不建议这样使用,尤其是后台处理数据后需要序列化,但是user.role_name返回的是一个对象序列化时会报错;

    还是先获取对应主表对象,再获取主表对象具体的字段值。

最新文章

  1. 近期十大优秀jQuery插件推荐
  2. 拼接json时小心C#中bool类型转化
  3. 406. Queue Reconstruction by Height
  4. Linux i2c子系统(一) _动手写一个i2c设备驱动
  5. gradle 使用总结
  6. [USACO12OPEN]书架Bookshelf
  7. Java语言程序设计-Markdown格式作业模板
  8. WordPress版微信小程序2.6版发布
  9. 数据库索引的数据结构b+树
  10. 快速掌握JavaScript面试基础知识(三)
  11. Web大前端面试题-Day5
  12. Jmeter --- 分布式测试
  13. DevOps - CI - Sonar
  14. liunx 时间ntp同步服务器
  15. centos7 lvs keepalived做DNS集群负载
  16. Oracle EBS 隐藏帮助-诊断-检查
  17. Linux:Aircrack-ng
  18. RHCE7 学习里程-3基本命令
  19. 如何编译 opencv3 和 opencv_contrib(Linux)
  20. Git命令中日常不注意又很重要的坑

热门文章

  1. asp.net+ tinymce粘贴word
  2. C语言中【变量】的存储类型共有4种类型
  3. lixuxmint系统定制与配置(1)-系统初始配置
  4. 从Word到WinEdit的复制
  5. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]
  6. MySQL 常用字段类型与对应的Java类型
  7. Java之ClassLoader基础知识
  8. 教你用WordPress搭建个人博客
  9. Pytest权威教程13-Fixture方法及测试用例的参数化
  10. A2T和T2A,===string和CString互转 方法一:--用宏的方式