对视图或模型管理器DJANGO进行查询

2024-10-02 02:39:40 发布

您现在位置:Python中文网/ 问答频道 /正文

几天前,一个人向我解释说,在RubyonRails上,查询是在模型上完成的。因为它在视图和查询中被请求之前已经保存在您的数据中

顺便说一句,我学习并一直工作到现在,我正在views.py上设置查询并通过上下文变量传递。所以我开始阅读Model.Manager,但仍然没有找到哪种方法更好的答案:

  1. 对意见的查询
  2. 简单函数对模型的查询
  3. 对每个模型的models.Manager类进行的查询

Tags: 数据方法函数答案py模型视图model
3条回答
  1. 在模型中使用自定义查询集和模型管理器
  2. 从视图中调用模型的ModelManager自定义方法
  3. 将返回的值(查询集、实例或其他)传递给模板(或JSON序列化程序等)

这是一个关注点分离的问题:

  1. 模板(或json序列化程序或其他)不必知道数据来自何处,也不必知道它们是从何处获得的——只需要知道数据结构是什么
  2. 视图不必知道查询是如何实现的,只需要知道如何获取相关数据
  3. 只有模型层应该知道它的实现(封装101)

Click here for Documentation

Ref.

默认情况下,Django向每个Django模型类添加一个名为objects的管理器。 如果您有特定的业务逻辑,您可以使用管理器覆盖内置的模型方法,如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()

在应用程序中创建文件managers.py文件 文件名-->;经理.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

这将基于在管理器中编写的查询返回对象

我希望这是有帮助的

每个模型都与一个管理器关联(默认为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-正确的解释

相关问题 更多 >

    热门问题