2016-07-04 100 views
0

我一直在试图找到一种方法来缓和进入数据库的项目,以便超级用户必须在显示之前审批。我发现,Django的监控管理几乎做所有这一切,我已经阅读并按照文件(here),每当我打电话django_monitor.nq(模型名称),我得到一个错误说:Django监视器 - get_model()至多需要3个参数(4给出)

get_model takes at most 3 arguments (4 given) 

我不明白是什么导致了这个问题,并且一直无法找到任何有助于解决问题的方法。

+1

你确定django-monitor正在使用你的django版本吗? django-monitor在过去3年没有更新! – Jerzyk

+0

请向我们展示版本和您的型号代码。 – Destrif

回答

0

这看起来像一个lib问题。如果您确定它是由该行引起的,那么lib的工作就会出错。我怀疑这是一个lib错误,所以完整的回溯会帮助很多,并且模型声明也是如此。 另外,看看你的django版本是否被lib支持。

顺便说一下,当您调用一个函数的参数太多时,会导致该错误。 假设你有一个类

class Foo(object): 
    def __init__(self, other): 
     self.other=other 

电话:

>>> Foo(1) 
<Foo object at 0x7f27566f90d0> 
>>> Foo(1,2) 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
TypeError: __init__() takes exactly 2 arguments (3 given) 

美孚(1)工作,因为类的初始化需要两个参数(个体经营等)

0

现在看来似乎是与您的django版本不兼容。看着好像它是固定的repo source

try: 
     registered_model = get_model(
      model._meta.app_label, model._meta.object_name, False, False 
     ) 
    except TypeError: 
     # Django versions prior to 1.4 accept 3 params to get_model. 
     registered_model = get_model(
      model._meta.app_label, model._meta.object_name, False 
     ) 

除非错误现在提出的是不是一个TypeError

+0

我想这可能是因为我使用的是django 1.7,你提到的一点是它说错误的地方,但我无法弄清它为什么失败。我可能会让django缓和一下。 – Gary

+0

好吧,这对django 1有帮助。7,函数的'get_model'3个预期参数中的1个是'self'。所以'try'和'except'块中的代码都失败了。 https://github.com/django/django/blob/d92b08536d873c0966e8192e64d8e8bd9de79ebe/django/apps/registry.py#L186 – fips

+0

那么我该如何解决这个问题? – Gary

0

get_model()在1.7变为如在release notes解释说:

该应用程序的注册表保留了旧的应用程序缓存的某些功能。 尽管应用程序缓存是一个私人API,过时的方法和 参数将通过一个标准的折旧路径拆下,用 的是立即生效的以下变化除外:

  • [...]

  • get_model和get_models的only_installed参数不再存在,也不存在get_model的seed_cache参数。

由于django的监视器尝试的这些参数的至少一个传递到get_model(),它与Django的不相容1.7+。它只接受app_labelmodel_name参数。

相关问题