[Django] objects 的定义在哪里?
首先
在Django中,访问数据库时需要自定义数据模型。然后,在views.py等文件中以以下方式编写并处理数据。
from django.contrib.auth.models import User
def index(request):
user=User.objects.all()
在上一篇文章中,我提到了这个objects变量是Django中用于将数据模型与数据库连接的ORM的Manager类。
这一次我们将追踪源代码,确认一下objects变量是在哪里定义的。
曾去過
打开django.contrib.auth.models文件,其中定义了名为User的类。
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
class Abstract(AbstractBaseUser,PermissionMixin):
...
class User(AbstractUser):
...
我找到了。
from django.db import models
...
class AbstractBaseUser(models.Model):
...
这里没有。我们要继续往前找。
...
class Model(metaclass=ModelBase):
...
看起来似乎存在于这个ModelBase中。
...
class ModelBase(type):
...
if not opts.managers:
if any(f.name == 'objects' for f in opts.fields):
raise ValueError(
"Model %s must specify a custom Manager, because it has a "
"field named 'objects'." % cls.__name__
)
manager = Manager()
manager.auto_created = True
cls.add_to_class('objects', manager)
def add_to_class(cls, name, value):
if _has_contribute_to_class(value):
value.contribute_to_class(cls, name)
else:
setattr(cls, name, value)
我們使用 Python 內置函數`setattr()`在資料模型生成時為 objects 變數指派了 Manager 類別。
这意味着你可以自己创建一个独立的自定义管理器并将其赋值给”objects”。我会附上一个参考网站的链接,其中有关于如何创建自定义管理器的指南。
请参考以下网站
使用Django的自定义管理器