为什么Django要使用代理模型更改表?

时间:2018-10-31 09:06:40

标签: python django django-models django-database

我正在使用Django 1.8,Python 2.7.15。初级开发人员

我创建了一个模型测试,该模型具有对Django Group模型的多对多字段:

class Test(models.Model):
    group = models.ManyToManyField(Group)

我已经进行了迁移,我的项目正在运行,一切都很好。

现在,我必须与专门的经理一起创建Group的代理模型:

class ExtendedGroup(Group):
    get_all = AllGroupsManager()
    objects = DefaultGroupManager()

    class Meta:
        proxy = True

我必须更改我的“测试模型”组字段(它的方法必须使用新的管理器...因此我必须使用ExtendedGroup): 我正在将ManyToManyField关系从Group更改为ExtendedGroup。

class Test(models.Model):
    group = models.ManyToManyField(ExtendedGroup)

ExtendedGroup是代理模型,因此即使我使用ExtendedGroup(因为它是代理模型),我认为Test的group字段也应与Group相关。

但是当我运行服务器时,出现了ProgrammingError:

  

列test_test_group.extendedgroup_id不存在

当我进行“ makemigrations”操作时,我可以看到Django希望更改与模型(ExtendedGroup)具有新关系的group字段,该模型实际上在数据库中没有任何表,因为它是代理模型。

operations = [
        migrations.AlterField(
            model_name='test',
            name='group',
            field=models.ManyToManyField(to='mainpage.ExtendedGroup'),
        ),
    ]

这是怎么回事?这样对吗?为什么Django要创建与没有任何表的模型的关系?

我只是不明白。

我将不胜感激!

编辑: 当我运行迁移(迁移)时,我会遇到很多错误:

  

AttributeError:'ManyToManyField'对象没有属性   'm2m_reverse_field_name'

所以它不起作用:(

0 个答案:

没有答案