Django笔试题
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。下面就由第一范文网小编为大家介绍一下Django 笔试题的文章,欢迎阅读。
Django 笔试题篇1
Django的Model的继承有几种形式,分别是什么?
一、抽象继承:
顺便复习OOP思想,继承是面向对象的大前提�r(�s���t)�q,抽象类,之所以被创建是用来被继承的;一个类如果包含任何一种抽象方法,那么它就是抽象类;抽象方法一定要在子类中被复写;在继承关系中,抽象类永远在树枝节点上……扯远了,而且对于Python来说,已经没有这么多约束了。回到Django的Model,也一样,当我们需要某些公共方法.字段时,就需要一个父类为其他子类服务,这个父类没有manager,Django也不为这个类创建表,这种继承的定义方法如下:
class Animal(models.Model):
name = models.CharField(max_length=50)
age = models.PositiveIntegerField
# 下面这句决定了Animal是一个抽象类/Model
class Meta:
abstract = True
class Human(models.Model):
kind_hearted = models.BooleanField
sex = models.CharField('sex', choices=(('m','male'), ('f', 'female')), max_length=1)
上例中,我们的Human子model中,自然包含了name和age的字段,但是Animal不能作为正常model使用,由于没有manager,所以也不能实例化、保存。在子类中,不可以建立与这个抽象父类中的相同的字段,Django表示对报错负责。
二、 正常的继承 , 多重继承 ,Joined映射
和抽象继承的主要区别是父类这时也可以拥有数据库表了,并且不在身为存储公共信息的抽象类了,父类也可以进行实例化,查询等操作了。
class Country(models.Model):
name = models.CharField(max_length=10)
class Province(Country):
return = models.BooleanField
三、代理
即在子类中只能增加方法,而不能增加属性,在不影响父类数据存储的前提下,使子类继承父类,此时子类称为父类的“代理”。例如:
from django.contrib.auth.models import User
class Person(User):
# this makes a class proxy
proxy = True
def can_dance(self):
return True
# both Yellow and Black can_dance :)
class Yellow(Person):
hometown = models.CharField(max_length=30)
class Black(Person)
tribe_name = models.CharField(max_length=100)
我们为Person类增加了一个方法,可以跳舞,并且保持了User的数据字段的不变。
Django 笔试题篇2
Django的Queryset是什么,objects是什么,objects在哪里可以定义。
query + set,已经能猜出大概,它对应着数据库中的若干条记录。
例如有一个叫做Order的模型,在project的根目录下进入shell进行操作:
$python manage.py shell
>>>from app.order.models import Order
>>>type(Order.objects)
>>>
>>>order = Order.objects.all
>>>type(order)
上述方法很常用,看继承关系去理解Queryset和objets。objects是每个Model默认的manager类,通过manager的方法(也可通过QuerySet的方法得到,当然QuerySet也来自于manager),得到相应的Queryset,用以对数据库
模型
字段进行更多的操作。
objects(manager)方法可以自定义添加,也可以直接赋值覆盖掉默认的管理方法。
试着添加一个新的管理器的步骤是这样,首先定义一个manager类继承自models.Manager ,并在其中对self进行操作,如下:
# new manager
class OrderManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count
class Order(models.Models):
title = models.CharField(max_length=100)
#objects = models.Manager
objects = OrderManager
def __unicode__(self):
return self.title
上述例子中我们把 OrderManager 赋值给了objects,替换了默认的管理器。
tips:如果增加了新的管理器,且没有替换掉默认管理器,那么默认管理器需要显式的声明出来才可以使用。
Django中查询queryset时什么情况下用Q?
在进行相对复杂的查询时,使用 django.db.models.Q 对象。
上一篇:Android研发工程师笔试题目
下一篇:C字符串笔试题