1、问题背景在 Django 中,模型之间的关系通常使用外键(ForeignKey)来建立。外键允许一个模型中的字段引用另一个模型中的主键。然而,有时我们需要在一个模型中引用另一个模型中的多个字段。...例如,我们有一个 product_models 表,其中包含产品的信息,如产品名称、价格和描述。...我们还有另一个 sales_process 表,其中包含销售过程的信息,如潜在客户、员工、首次联系时间等。...以下是如何在 Django 中使用复合主键来实现外键引用另一个表中的多个字段:在 product_models 模型中,添加一个 id 字段作为主键:class product_models(models.Model...以下是如何在 Django 中使用複合鍵的示例:# Get the product model with the specified nameproduct = product_models.objects.get
基于对象的权限控制(如:系统用户分为平台运营人员和商家用户,商家用户小A只能查看编辑所属商家记录,而管理员可以纵览全局) 3....数据库记录导入导出(xsl, json等),并且拥有对象级的权限控制(如:小A不能导出小B公司的信息,更不能导入小B公司信息进行更新和新增) 1.2 现状 实现需求1:Django-admin...): user = models.OneToOneField(User, verbose_name='用户名') is_taixiang_admin = models.BooleanField...('客户电话', max_length=12) type_choice = ((1, '普通'), (2, '批发'), (3, 'VIP')) creator = models.ForeignKey...itself from __future__ import absolute_import import rules # 使用修饰符@rules.predicate自定义predicates(判断),返回
方法是一个钩子,可用于定制操作,如:上述的异常处理。...UserInfoForm(forms.ModelForm): username = forms.CharField(error_messages={'required': '用户名不能为空...(可以被重复选择) 例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。...多对多:在某表中创建一行数据是,有一个可以多选的下拉框 例如:创建用户信息,需要为用户指定多个爱好 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了 例如:原有含10...与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) def
name = models.CharField(max_length=100) tagline = models.TextField() def __unicode__(self):...joe = Author.objects.create(name="Joe") entry.authors.add(joe) 检索对象 检索所有的对象 使用all()方法返回数据库中的所有对象。...all_entries = Entry.objects.all() 检索特定的对象 返回一个与参数匹配的QuerySet,相当于等于(=) #fileter(**kwargs) Entry.objects.filter...(pub_date__year=2006) 以上语句等同于slect * from entry where pub_date_year=’2006’ 返回一个与参数不匹配的QuerySet,相当于不等于...Entry.objects.all()[:5] 查找从第5个到第10个之间的数据 Entry.objects.all()[5:10] 查询从第0个开始到第10个,步长为2的数据 Entry.objects.all
headline = models.CharField(max_length=200) content = models.TextField() repoter = models.ForeignKey...headline = models.CharField(max_length=200) content = models.TextField() repoter = models.ForeignKey...(Repoter) def __unicode__(self): return self.headline #在news下的 admin.py from django.contrib...一旦匹配成功,Django将导入并调用相应的视图。 每个视图都将得到一个request对象,它包含request的meta信息和正则表达式所捕获到的值。 例如:用户请求URL....每个视图只做两件事:返回一个包含请求页面内容的Httpesponse对象;或者抛出一个异常。
/manage.py syncdb #若使用 ./*.py 需要给 *.py 可执行权限,使用: chmod a+x *.py 给所有用户添加权限 Creating tables ......choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) poll = models.ForeignKey...(Poll) def __unicode__(self): return self.choice_text (4)要想在admin中管理,新创建的model,需要在admin.py...#需要使用到 admin.ModelAdmin 类,使PollAdmin 从其继承而来。...注:在模型models中的某个Model下,新建一个有返回值的函数。官方文档显示是可以在admin相应列表项中显示。但是自己在测试的时候,却不能显示。
WeizhongTu 那么如何从数据库是查询到它呢?...或False, 新建时返回的是True, 已经存在时返回False....(object, True/False) 备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回...哈哈哈哈哈哈~ 用户ID:{{ request.session.id }} 用户名:{{ request.session.username }} </...else: error = '用户名已经存在!'
2、检索特定的对象 使用以下两个方法: fileter(**kwargs) 返回一个与参数匹配的QuerySet,相当于等于(=). ...exclude(**kwargs) 返回一个与参数不匹配的QuerySet,相当于不等于(!=)。...… ).exclude( … pub_date__gte=datetime.now() … ).filter( … pub_date__gte=datetime(2005, 1, 1) … ) 最后返回的...其他的QuerySet方法 >>> Entry.objects.all()[:5] 这是查找前5个entry表里的数据 >>> Entry.objects.all()[5:10] 这是查找从第5个到第10...>>> Entry.objects.all()[:10:2] 这是查询从第0个开始到第10个,步长为2的数据。
因为从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。 为了方便理解,我继续使用上篇文章的例子。另外方便我们在打印对象信息时,能得到对象的信息。所以我们需要对之前的代码做下修改。...分别为每个模型类添加一个方法 __unicode__()。 __unicode__() 方法告诉 Python 如何将对象以 Unicode 的方式显示出来。...self): return self.title __unicode__() 方法可以进行任何处理来返回一个 unicode 对象。...因为上限从 0 开始可以忽略不写,所以它等同于 [0:3]。查询出来结果没有包含上限的值,即下标为 3 的值。[:3] 只查询下标为 0, 1 ,2 的数据。...但是这里比较特殊,QuerySet 对象的 id 是从 1 开始的,所以 [:3] 表示 [1:3], 返回 id 为 1, 2, 3 的对象。 另外,这种切片操作时可以节约内存的。
简介 Django是Python主流的 Web开发框架,功能强大,是Python Web应用开发的第一选择。 使用 Django,您可以在几个小时内完成 Web 应用程序从概念到启动的过程。...安全性: Django 内置了一些安全性功能,例如防止常见的 Web 攻击(如 CSRF 攻击),并提供了方便的用户身份验证和授权系统。...简易图: 用户操作流程图: 解析: 用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数: a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户...b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。 视图函数把返回的数据填充到模板中空格,最后返回网页给用户。...[root@solar HelloWorld]# 之后输入用户名密码登录,界面如下: 为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin。
oracle 'NAME':"mypythonblog", #数据库名称 'USER': 'xxxxxx', # 用户名...django.db.backends.mysql', 'NAME':"mypythonblog", 'USER': 'root', # 用户名...从图中可以看出创建了9个数据表,并且提示是否为系统创建一个超级管理员,为了以后登录系统,我们输入yes。 之后按照提示输入用户名及密码即可。...输入刚刚创建的超级用户的用户名和密码,点击login按钮,即来到如下的管理界面: ? 通过这个管理界面,可以方便的对用户组和用户进行管理,并且有详细的日志记录。...接下来,启动网站,访问http://127.0.0.1:1989/admin/ 输入用户名和密码,进入管理页面,咦,什么情况,说好的安装什么app就会出现对应的管理功能呢,怎么依然只有Auth这个app
注意 如果你使用的是Python 2.7,应调用方法__unicode__(),而不是__str__(),但其中的代 码相同。...(ll_env)learning_log$ 你执行命令createsuperuser时,Django提示你输入超级用户的用户名(见1)。...这里我们输 入的是ll_admin,但你可以输入任何用户名,比如电子邮件地址,也可让这个字段为空(见2)。 你需要输入密码两次(见3)。 注意 可能会对网站管理员隐藏有些敏感信息。...向管理网站注册模型 Django自动在管理网站中添加了一些模型,如User和Group,但对于我们创建的模型,必须 手工进行注册。...现在,使用超级用户账户访问管理网站:访问http://localhost:8000/admin/,并输入你刚创建 的超级用户的用户名和密码,你将看到类似于图18-2所示的屏幕。
通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。...的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。接下来对该查询集 的求值将重用缓存的结果。 请牢记这个缓存行为,因为对查询集使用不当的话,它会坑你的。...查询集不会永远缓存它们的结果。当只对查询集的部分进行求值时会检查缓存, 如果这个部分不在缓存中,那么接下来查询返回的记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询集将不会填充缓存。...select_related 返回一个QuerySet,当执行它的查询时它沿着外键关系查询关联的对象的数据。它会生成一个复杂的查询并引起性能的损耗,但是在以后使用外键关系时将不需要数据库查询。...nid" = 1; args=(1,) 深层查询 # 查询id=1的文章的用户姓名 article=models.Article.objects.select_related("blog")
mananger的方法和QuerySet的方法大部分同名,同意思,如filter(),update()等,但也有些不同,如manager有create()、get_or_create(),而QuerySet...由于有些数据库,如Sqlite不支持delete与limit连用,所以在这些数据库对QuerySet的切片执行delete()会出错。...>>> from django.contrib.auth.models import User >>> from django.db.models import Count #计算每个用户的userjob...,它们的每个元素包含若干主表和关联表的字段,不包含任何实体和关联实例,这种情况要用values()和values_list();第四种:返回model instance;第五种:单个值,如aggregate...如果只想知道一个QuerySet有多大,而不想获取QuerySet中的每个元素,那就用count();如果已经从数据库获取到了QuerySet,那就用len() 2.4.12 contains/startswith
处理错误: 这其中,如果你能够预知在自定义的操作中可能产生的错误,请处理该错误,并通过django.contrib.admin.ModelAdmin.message_user()以友好的方式给予用户提示信息...但有时候,一些复杂的action需要返回中间页面,例如内置的删除方法,在执行删除动作之前,会弹出一个删除确认页面。...要实现这个功能,只需要在action方法中返回一个HttpResponse(或它的子类)。...该方法将返回一个包含actions的字典。...字典的键是aciton的名字(也就是前面的'delete_selected', 'a_third_action'之类),值是一个元组,包含(函数、名字、别名) 例如,允许用户名以“J”开头的用户批量删除对象
通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。...首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。...查询集不会永远缓存它们的结果。当只对查询集的部分进行求值时会检查缓存, 如果这个部分不在缓存中,那么接下来查询返回的记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询集将不会填充缓存。...select_related 返回一个QuerySet,当执行它的查询时它沿着外键关系查询关联的对象的数据。它会生成一个复杂的查询并引起性能的损耗,但是在以后使用外键关系时将不需要数据库查询。...nid" = 1; args=(1,) 深层查询 1 2 3 4 # 查询id=1的文章的用户姓名 article=models.Article.objects.select_related
NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 使用MySQL数据库首先需要安装驱动程序 pip install PyMySQL 在Django的工程同名子目录的...__init__.py文件中添加如下语句 import pymysql pymysql.install_as_MySQLdb() 作用是让Django的ORM能以mysqldb的方式来调用PyMySQL...'HOST': '127.0.0.1', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名...'PASSWORD': 'mysql', # 数据库用户密码 'NAME': 'book' # 数据库名字 } } 二、相关案例 from django.db...primary_key=True, max_length=30, null=False) viewcnt = models.IntegerField() # 在Python2中用__unicode
models.IntegerField(blank=True, null=True) jobmst_crttm = models.DateTimeField() jobdtl_id = models.ForeignKey...', blank=True, null=True) jobmst_lstchgtm = models.DateTimeField(blank=True, null=True) def __unicode...results.append(dictionary) return Response(results)2.3 配置URL路由最后,我们需要在URL路由中配置视图,以便当用户访问特定...例如,访问URL http://localhost/TidalDEV/,会返回所有Jobmst和Jobdtl模型数据的JSON序列化结果。...访问URL http://localhost/TidalDEV/50244/,会返回Jobmst和Jobdtl模型数据的JSON序列化结果,其中Jobmst的jobmst_id为50244。
(max_length=70) def __unicode__(self): return self.full_name class Article(models.Model...>>> r.delete() 一个动态的管理接口:它不仅仅是个脚手架 – 还是个完整的房子 一旦你的 models 被定义好,Django 能自动创建一个专业的,可以用于生产环境的 管理界面 – 一个可让授权用户添加...正则表达式通过圆括号来“捕获” URLs 中的值。当一个用户请求一个页面时, Django 将按照顺序去匹配每一个模式,并停在第一个匹配请求的 URL 上。...编写你的视图(views) 每个视图只负责两件事中的一件:返回一个包含请求页面内容的 HttpResponse 对象; 或抛出一个异常如 Http404 。至于其他就靠你了。...您可以使用其他数据库抽象层,您可以读取 XML 文件,你可以从磁盘中读取文件,或任何你想要的方法去操作数据。 Django 的每个组成部分: 模型、视图和模板都可以解耦,以后会谈到。
我的 Django 项目里的用户可以发图片。 我想实现一个收藏功能,就是用户可以收藏其他用户发布的图片。...= models.ForeignKey(Pictures) created_on = models.DateTimeField(auto_now_add=True) def __unicode... fav_type = request.POST.get('fav_type', 0) # 收藏与已收藏取消收藏 # 判断用户是否登录:即使没登录会有一个匿名的...user if not request.user.is_authenticated: # 未登录时返回json提示未登录,跳转到登录页面是在ajax中做的 ...course_org.id }}, 2); }); BLOG_20190604_140507_46 机构信息页面视图添加收藏状态 例如机构首页,添加has_fav来检测是否已收藏,且需要用户登录的
领取专属 10元无门槛券
手把手带您无忧上云