django orm级联_Django ORM 一对多表的创建

前面已经学习了在Django里面,如何对单表进行增删改查询。下面学习一下如果存在外键约束的情况下,如何创建。

例1

models.pyfrom django.db import models

class UserGroup(models.Model):

uid = models.AutoField(primary_key=True)

caption = models.CharField(max_length=32,unique=True)

ctime = models.DateTimeField(auto_now_add=True, null=True)

uptime = models.DateTimeField(auto_now=True, null=True)

class UserInfo(models.Model):

username = models.CharField(max_length=32,blank=True,verbose_name='用户名')

password = models.CharField(max_length=60, help_text='pwd')

email = models.CharField(max_length=60)

test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码'})

# user_group_id 数字

user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptimew)

user_type_choices = (

(1, '超级用户'),

(2, '普通用户'),

(3, '普普通用户'),

)

user_type_id = models.IntegerField(choices=user_type_choices,default=1)

创建外键约束的关键语句就是一条命令。user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptime)

注意几点:to_field 指向另外一个类的主键

默认情况下,他会创建级联删除的约束,也就是说如果我删除user_group里面的一行数据,userInfo表里和这个uid数据关联的行都会自动删除;我们可以通过 on_delete=models.SET_NULL来禁止删除

在UserInfo的表里,他会自动创建一个新的字段 user_group_id 作为外键的字段,而不是我们类里面定义的user_group。但是有趣的是,我们在程序里面可以直接在userInfo的对象里面引用 user_group对象。

数据库里面创建的表,注意字段名称

下面看个调用的实例

例2. 可以看见我能够通过row.user_group.caption来直接获取用户组表的信息,相当于执行了一个left join的查询操作

views.pydef user_info(request):

if request.method == "GET":

user_list = models.UserInfo.objects.all()

group_list = models.UserGroup.objects.all()

return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})

user_info.html

添加用户

{% for item in group_list %}

{{ item.caption }}

{% endfor %}

用户列表

{% for row in user_list %}

{{ row.username }} |

 {{ row.user_group.caption }} 

删除 |

编辑

{% endfor %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值