DjangoORM一对多表的创建-创新互联

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

创新互联专业为企业提供贡井网站建设、贡井做网站、贡井网站设计、贡井网站制作等企业网站建设、网页设计与制作、贡井企业网站模板建站服务,10余年贡井做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

例1

models.py

from 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)

注意几点:

  1. to_field 指向另外一个类的主键

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

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

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

    Django ORM  一对多表的创建

下面看个调用的实例

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

views.py

def 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

<h4>添加用户</h4>
<form method="POST" action="/cmdb/user_info/">
    <input type="text" name="user" />
    <input type="text" name="pwd" />

    <select name="group_id">
        {% for item in group_list %}
            <option value="{{ item.uid }}">{{ item.caption }}</option>
        {% endfor %}
    </select>

    <input type="submit" value="添加"/>
</form>

<h4>用户列表</h4>
<ul>
    {% for row in user_list %}
        <li>
            <a href="/cmdb/userdetail-{{ row.id }}/">{{ row.username }}</a> |
            <span> {{ row.user_group.caption }} </span>
            <a href="/cmdb/userdel-{{ row.id }}/">删除</a> |
            <a href="/cmdb/useredit-{{ row.id }}/">编辑</a>
        </li>
    {% endfor %}
</ul>

Django ORM  一对多表的创建

网站题目:DjangoORM一对多表的创建-创新互联
链接URL:https://www.cdcxhl.com/article0/dsheio.html

成都网站建设公司_创新互联,为您提供网站设计公司品牌网站制作网站排名网页设计公司网站维护小程序开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计