如何在django系统外使用django的ORM
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django系统外使用django的ORM相关的知识,希望对你有一定的参考价值。
参考技术A #!/usr/bin/env python# -*- coding: utf-8 -*-
#python2.7x django_orm_use.py zhizhi.liu@2014-03-21
import sys,os
#pro_dir = '' #可以自己用绝对路径定义,目的是工程目录下
pro_dir = os.getcwd() #如果放在project目录,就不需要在配置绝对路径了
sys.path.append(pro_dir)
os.environ['DJANGO_SETTINGS_MODULE'] ='nirvana.settings' #项目的settings
#django 1.6 之后,不用像下面导入setup了
from django.core.management import setup_environ
import settings #导入settings
setup_environ(settings) #设置settings
#===============调用代码部分================
from userManage.models import UserProfile
print UserProfile.objects.all().count() 参考技术B #!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x django_orm_use.py zhizhi.liu@2014-03-21
import sys,os
#pro_dir = '' #可以自己用绝对路径定义,目的是工程目录下
pro_dir = os.getcwd() #如果放在project目录,就不需要在配置绝对路径了
sys.path.append(pro_dir)
os.environ['DJANGO_SETTINGS_MODULE'] ='nirvana.settings' #项目的settings
#django 1.6 之后,不用像下面导入setup了
from django.core.management import setup_environ
import settings #导入settings
setup_environ(settings) #设置settings
#===============调用代码部分================
from userManage.models import UserProfile
print UserProfile.objects.all().count() 参考技术C 在django项目中使用: python manage.py shellfrom django.db import connection#import 相关模型的class#执行query查询print connection.queries
Django ORM 一对多表的创建
前面已经学习了在Django里面,如何对单表进行增删改查询。下面学习一下如果存在外键约束的情况下,如何创建。
例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)
注意几点:
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.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
<h3>添加用户</h3> <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> <h3>用户列表</h3> <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>
本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1946602
以上是关于如何在django系统外使用django的ORM的主要内容,如果未能解决你的问题,请参考以下文章