0

我试图为一些额外的字段扩展 auth.models 组。这是我在 myapp.models.py 中所做的:

class ProfileGroupBase(type):
    def __new__(cls, name, bases, attrs):
        module = attrs.pop('__module__')
        parents = [b for b in bases if isinstance(b, ProfileGroupBase)]
        if parents:
            fields = []
            for obj_name, obj in attrs.items():
                if isinstance(obj, models.Field): fields.append(obj_name)
                Group.add_to_class(obj_name, obj)
        return super(ProfileGroupBase, cls).__new__(cls, name, bases, attrs)

class ProfileGroup(object):
    __metaclass__ = ProfileGroupBase

class MyGroup(ProfileGroup):
    mobile = models.CharField(max_length = 15)
    email = models.CharField(max_length = 15)

使用这些代码,移动和电子邮件字段将添加到管理页面上的组中。现在我想添加另一个多线程字段,所以我在 MyGroup(ProfileGroup) 类下添加了这个:

  annotations = models.ManyToManyField(Annotation, verbose_name=_('annotation'), blank=True)

然后我在同一个 models.py 文件下创建了一个新的模型注解:

class Annotation(models.Model):
    index = models.IntegerField()
    name = models.CharField(max_length = 100)

但是,出现错误:未定义名称“注释”。我想知道 MyGroup 类和 Annotation 类是在同一个 models.py 下定义的,它们实际上是分开的。我很困惑,有人知道这是怎么回事吗?谢谢。

4

2 回答 2

1

让我猜猜,您Annotation在前一个模型之后定义了模型,其中您具有多对多关系。

class Annotation(models.Model):
    index = models.IntegerField()
    name = models.CharField(max_length = 100)

只需剪切Annotation模型的代码并将其粘贴到另一个模型之前。

于 2013-11-04T15:52:20.057 回答
1

在定义 ForeignKey 或 ManyToManyField 时,您应该使用包含应用程序名称和模型名称的字符串而不是实际类来定义另一个类。所以这样做

注释 = models.ManyToManyField('myapp.Annotation',
 详细名称=_('注释'),空白=真)

这有助于引用尚未定义的模型,但也有助于循环引用。所以我建议一直这样做。另请查看外键文档:https ://docs.djangoproject.com/en/1.5/ref/models/fields/#foreignkey

于 2013-11-04T15:57:06.550 回答