在Django中,中间模型是否需要与目标模型属于同一文件?

时间:2018-08-05 19:46:12

标签: django django-models many-to-many django-orm django-migrations

在运行迁移时,每当我定义了ManyToManyField的模型与我要定位的模型位于单独的文件中时,我当前都会收到此懒惰参考ValueError 。但是,当我将两个模型放在同一个文件中时,便能够成功运行迁移。

  1. 为什么会发生此错误?
  2. 是否可以将模型(community.py和community_member.py)分离到单独的文件中?
  

ValueError:包含一个   懒惰引用fitness.communitymember,但应用程序“ fitness”没有   提供模型“社区成员”。

我的目录结构如下:

my_app
  |----fitness
       |----user.py
       |----community.py
       |----community_member.py

community.py

class Community(models.Model):
    id = models.AutoField(
        primary_key=True,
    )
    owner = models.ForeignKey(
        User,
    )
    members = models.ManyToManyField(
        User,
        through='CommunityMember',
        through_fields=('community', 'member')
    )

    class Meta:
        db_table = 'Communities'

community_member.py

class CommunityMember(models.Model):
    community = models.ForeignKey(
        Community,
        db_column='community_id'
    )
    member = models.ForeignKey(
        User,
        db_column='member_id',
    )

    class Meta:
        db_table = 'Community_Members'

settings.py

INSTALLED_APPS = [
    'my_app.fitness'
]           

如果将 community_members.py 的内容放置在 community.py 内,迁移将成功执行,但是我不确定为什么。

1 个答案:

答案 0 :(得分:1)

匆匆忙忙,我真的不知道为什么需要拆分模型,但是如果您坚持要这样做,则一定有原因。默认的Django应用必须包含models.py文件。 ValueError来自Django无法找到您所有模型定义的事实,因为它很简单,不知道在哪里寻找这些模型。如果您坚持这样做(我个人不建议仅使用两个模型),则应该执行文档建议的操作:https://docs.djangoproject.com/en/1.11/topics/db/models/#organizing-models-in-a-package