python - 无法使用 models.Manager 检索 Django 对象列表

标签 python django django-models django-views django-queryset

我的 models.py 中有以下结构场景:

from django.db import models

class SensorManager(models.Manager):
    def create_sensor(self,numero,pinoFisico):
        sensor = self.create(numero = numero,
                             pinoFisico = pinoFisico,
                             ativo      = False)
        return sensor

class Sensor(models.Model):
    numero = models.IntegerField()
    pinoFisico = models.IntegerField()
    ativo = models.BooleanField()
    dataUltimoReconhecimento = models.DateTimeField()
    situacao = None
    moduloSensor = None

    #Manager
    objects = SensorManager()

    def __init__(self):
        self.moduloSensor = ModuloSensor()

并且,在 views.py 文件中,我有这个:

def formSensores(request):
    sensores = Sensor.objects.all()
    print sensores
    return render(request,"speedapp/monitoraSensores.html",{"sensores": sensores})

当我尝试在

使用对象时

print sensores

我得到以下堆栈:

[17/Apr/2017 00:38:09] "GET /speedapp/ HTTP/1.1" 200 3649
Internal Server Error: /speedapp/sensores/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/pi/Documents/speed_project/speed/speedapp/views.py", line 39, in formSensores
    print sensores
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 234, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 258, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1074, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 69, in __iter__
    obj = model_cls.from_db(db, init_list, row[model_fields_start:model_fields_end])
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 460, in from_db
    new = cls(*values)
TypeError: __init__() takes exactly 1 argument (6 given)
[17/Apr/2017 00:38:11] "GET /speedapp/sensores/ HTTP/1.1" 500 15557

作为stack,好像是在__init__()中通过SensorManager方法构建Sensor对象那一刻的问题> 类 from_db 中的方法,其中需要 N 个参数...这个问题与我的自定义管理器 SensorManager 有关吗?

附言:

  1. 通过 models.Manager 与“all()”方法一起使用的其他对象不会发生此错误,仅此 Sensor 类不会发生此错误

  2. 只有当我尝试“使用”列表对象的实例时才会发生,使用 all() 方法获取,例如:打印它的值

  3. 我找到了 thisthis相关问题在我的搜索中,但我无法解决我的问题

最佳答案

这里是高级答案。问题是您覆盖了模型上的 __init__ 方法。你真的,真的应该尽量避免这种情况。这是有关其他选项的一些文档;阅读绿色大字条:https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model

摘录如下:

您可能想通过覆盖 __init__ 方法来自定义模型...而不是覆盖 __init__,尝试使用这些方法之一 1.在模型类上添加一个classmethod 2.在自定义管理器上添加方法(通常首选)

如果你绝对需要覆盖__init__,那么不要忘记调用super()传递值,让Django先做它的事情。

关于python - 无法使用 models.Manager 检索 Django 对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444267/

相关文章:

python - 如何使用 Django-Rest-Framework 序列化用户组

python - 生成使用 AES 封装的 RSA 私钥

python - 使用 METHOD=HEAD 发送 http 请求

python - Django错误: TypeError: __init__() got an unexpected keyword argument 'attrs'

django - 将错误插入InlineFormSet自定义验证器

django manytomany模型关系在对象创建时崩溃管理

SQL 导入文件以更新表值

python - Pycharm - 在 Django 控制台中自动加载模型

python - 为什么 UserDict 的 __copy__ 和 copy() 的行为不一致

python - NoneType 对象没有要获取的属性(Tkinter)