几天前,有个人向我解释说,在ruby on rails上,查询是在模型上完成的。因为它已保存到您的数据中,然后再请求视图和查询。
通过我已经学习并一直工作到现在的方式,我在views.py上设置查询并通过上下文变量进行传递。因此,我开始阅读有关Model.Manager的文章,但仍然找不到哪种方法更好的答案:
答案 0 :(得分:1)
每个模型都与一个Manager关联(默认值是objects
)
>>> from django.contrib.auth.models import User
>>> user = User.objects.all()
>>> type(user)
<class 'django.db.models.query.QuerySet'>
当您需要对模型进行任何查询时,您需要一位经理。在上面的示例中,用户对objects
用户模型管理者进行了查询。
3-queries made on models.Manager class for each model
-正确的解释
答案 1 :(得分:1)
默认情况下,Django将带有名称对象的Manager添加到每个Django模型类中。 如果您有特定的业务逻辑,则可以利用管理器来覆盖诸如save()和delete()之类的内置模型方法,以将业务逻辑添加到默认数据库行为中,或者可以专门设计一些查询逻辑。
文件名----> models.py
from .managers import ModelNameManager
class ModelName(Base):
title = models.CharField(max_length=255, blank=True, null=True)
headline = models.CharField(max_length=255, blank=True, null=True)
objects = ModelNameManager()
在应用程序中创建文件manager.py文件 文件名----> manager.py
class ModelNameQuerySet(models.QuerySet):
def by_name(self, id):
return self.filter(id=id)
class ModelNameManager(models.Manager):
def get_queryset(self):
return ModelNameQuerySet(self.model, using=self._db)
def by_name(self, ad):
return self.get_queryset().by_name(id)
在Views.py或您要查询的任何服务文件中
import ModelName
obj = ModelName.get_queryset(id)
obj.title
这将基于在管理器中编写的查询返回对象。
我希望这会有所帮助。
答案 2 :(得分:1)
这是关注点分离的问题:
答案 3 :(得分:1)
根据Django习惯用法,希望添加一些有用的建议:
error MSB3644: The reference assemblies for MonoAndroid,Version=v1.0 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application.
方法添加到用户模型管理器中。另外,您可以通过管理器中的get_by_name_and_domain
属性访问模型。