【问题标题】:How to fix "isinstance() arg 2 must be a type or tuple of types" error in Django如何修复 Django 中的“isinstance() arg 2 must be a type or tuple of types”错误
【发布时间】:2019-05-07 15:52:40
【问题描述】:

我创建了一个名为 Metric 的 Django (v. 2.1.5) 模型,它本身就是一个嵌入模型,如下所示:

from djongo import models

class Metric(models.Model):
    _id = models.ObjectIdField()
   ...
    dependencies = models.ArrayModelField(
        model_container='Metric',
        blank=True,
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'metric'

但是,当我尝试执行代码时:

for metric in Metric.objects.all():

我收到以下错误:

  File "/.../python3.6/site-packages/djongo/models/fields.py", line 235, in to_python
    if isinstance(mdl_dict, self.model_container):
TypeError: isinstance() arg 2 must be a type or tuple of types

我想这个错误是由于在 model_container 赋值上使用了单引号引起的,但我不能删除它,因为 model_container 是类本身。另外,我不确定是不是这个原因。

无论如何,我能做些什么来修复这个错误?

【问题讨论】:

  • 请显示整个models.py
  • ArrayModelField 来自哪里?这是什么?
  • @dirkgroten,可能是这个:nesdis.github.io/djongo/array-model-field
  • 我看不到任何对 Djongo 的引用,允许您将字符串用于 model_container 参数。通常在标准 Django 中,您可以将字符串名称或“self”用于诸如 ForeignKey 之类的内容,但 Djongo 似乎需要此处的实际类型 - 当然,在自引用字段的情况下尚未定义。所以,这可能是不可能的。
  • 我认为不可能将模型嵌入到自身内部。

标签: python django django-models djongo


【解决方案1】:

你不能那样做。引用 API 文档:

容器的模型必须声明为抽象的,因此不应被视为它自己的集合。

您只能将抽象模型用作容器。

【讨论】:

    【解决方案2】:

    我也有同样的错误,如果引用的模型不在同一个应用程序中,你应该使用这种格式

        dependencies = models.ArrayModelField(
            model_container='app_name.Metric',
            blank=True,
        )
    

    而不仅仅是

        dependencies = models.ArrayModelField(
            model_container='Metric',
            blank=True,
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 2020-03-23
      • 2017-12-03
      相关资源
      最近更新 更多