django中对数据库增加额外的操作,有一种办法是增加额外的manager方法是为模块添加表级功能。
比如下面这块代码段,我在models.py这个文件里面定义的:
from django.db import models
# ... Author and Publisher models here ...
class BookManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
objects = BookManager()
def __unicode__(self):
return self.title
但是,发现一个问题,如果我先定义了 Book() 这个模型,再定义BookManager() 这个模型,会报"NameError: name 'BookManager' is not defined",显然是因为在Book类中使用了objects = BookManager()
这个原因。
而我印象中,似乎定义函数和类是没有先后关系的;会在使用的时候自动查看是否声明过。请大大帮指点下我这块的知识盲点。谢谢!!马年恭喜发财!
python是解释型语言,虽然会进行预编译生成pyc文件,但主要是对库引用等可重用部分进行一些处理,这块不是很了解 哈哈~ 你可以看看这里
简单测试:
报错
So, 类不会在编译的时候提前声明... 在python里面要遵循解释型语言的一些定义和处理原则。
解释型语言我就知道javascript会对声明型函数做预处理...但是也仅仅是对声明式的函数定义做预处理,你是不是记混了?以下javascript的函数声明做个参考~