【问题标题】:do django version 2.2 and above support get_by_id method for model managersdjango 2.2 及以上版本是否支持模型管理器的 get_by_id 方法
【发布时间】:2020-11-13 13:33:42
【问题描述】:

类 ProductManager(models.Manager): def get_queryset(self): return ProductQuerySet(self.model, using=self._db)

def get_by_id(self):
    qs = self.get_queryset().filter(id=id)
    if qs.count() == 1:
        return qs.first()
    return None

【问题讨论】:

  • 请编辑您的问题并:a) 使用代码块功能(开头和结尾的三个```)来包含您的代码。示例:``` (new line) code (new line) ``` b) 为这段代码添加一些描述。

标签: django django-models


【解决方案1】:

Te get_by_id 方法在 your ProductManager 中定义,因此 Django 版本无关紧要。此外,该函数的逻辑是有效的,但不是很有效,因为它进行了两次查询。

您可以通过以下方式更有效地实现这一点:

from django.core.exceptions ObjectDoesNotExist, MultipleObjectsReturned

class ProductManager(models.Manager):
    def get_queryset(self):
        return ProductQuerySet(self.model, using=self._db)
    
    def get_by_id(self):
        try:
            return self.get_queryset().get(id=id)
        except (ObjectDoesNotExist, MultipleObjectsReturned):
            return None

【讨论】:

  • 我的错误是:AttributeError: 'str' object has no attribute 'get_queryset'
  • 请帮助我为什么会得到这个
  • @user13336549:你是如何使用Product模型中的管理器的?
【解决方案2】:

不,django 1.7 及以下版本将支持此方法 get_by_id。

1.7 之后的版本将无法使用此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多