VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Django框架(七):模型(三) 关联、模型类的属性(2)

pk=440100)
  • return render(request, 'booktest/area.html', {'area': area})
  • 打开booktest/urls.py文件,新建一条url。

    
    		
    1. urlpatterns = [
    2. ...
    3. url(r'^area/$', views.area),
    4. ]

    在templates/booktest目录下,新建area.html文件。

    
    		
    1. <html>
    2. <head>
    3. <title>地区</title>
    4. </head>
    5. <body>
    6. 当前地区:{{area.atitle}}
    7. <hr/>
    8. 上级地区:{{area.aParent.atitle}}
    9. <hr/>
    10. 下级地区:
    11. <ul>
    12. {%for a in area.areainfo_set.all%}
    13. <li>{{a.atitle}}</li>
    14. {%endfor%}
    15. </ul>
    16. </body>
    17. </html>

    运行服务器。

     python manage.py runserver

    在浏览器中输出效果如下图。

    回到顶部(go to top)

    2. 模型类的属性

    属性objects:管理器,是models.Manager类型的对象,用于与数据库进行交互。

    当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。

    为模型类BookInfo定义管理器books语法如下:

    
    		
    1. class BookInfo(models.Model):
    2. ...
    3. books = models.Manager()

    2.1 管理器Manager

    管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。

    自定义管理器类主要用于两种情况:

    • 1.修改原始查询集,重写all()方法
    • 2.向管理器类中添加额外的方法,如向数据库中插入数据。

    1.修改原始查询集,重写all()方法。

    a)打开booktest/models.py文件,定义类BookInfoManager

    
    		
    1. #图书管理器
    2. class BookInfoManager(models.Manager):
    3. def all(self):
    4. #默认查询未删除的图书信息
    5. #调用父类的成员语法为:super().方法名
    6. return super().all().filter(isDelete=False)

    b)在模型类BookInfo中定义管理器

    
    		
    1. class BookInfo(models.Model):
    2. ...
    3. books = BookInfoManager()

    2.在管理器类中定义创建对象的方法

    对模型类对应的数据表进行操作时,推荐将这些操作数据表的方法封装起来,放到模型管理器类中。

    a)打开booktest/models.py文件,定义方法create。

    
    		
    1. class BookInfoManager(models.Manager):
    2. ...
    3. #创建模型类,接收参数为属性赋值
    4. def create_book(self, title, pub_date):
    5. #创建模型类对象self.model可以获得模型类
    6. book = self.model()
    7. book.btitle = title
    8. book.bpub_date = pub_date
    9. book.bread=0
    10. book.bcommet=0
    11. book.isDelete = False
    12. # 将数据插入进数据表
    13. book.save()
    14. return book

    b)为模型类BookInfo定义管理器books语法如下:

    
    		
    1. class BookInfo(models.Model):
    2. ...
    3. books = BookInfoManager()

    c)调用语法如下:

    
    		
    1. 调用:book=BookInfo.books.create_book("abc",date(1980,1,1))

    2.2 元选项

    在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字。

    数据表的默认名称为:

    
    		
    1. <app_name>_<model_name>
    2. 例:
    3. booktest_bookinfo

    例:指定BookInfo模型类生成的数据表名为bookinfo。

    在BookInfo模型类中添加如下内容,代码如下:

    
    		
    1. #定义图书模型类BookInfo
    2. class BookInfo(models.Model):
    3. ...
    4.  
    5. #定义元选项
    6. class Meta:
    7. db_table='bookinfo' #指定BookInfo生成的数据表名为bookinfo
     
     

    
    相关教程
    关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号