ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 子应用程序中的’self’的ForeignKey在Django项目中的makemigrations上抛出错误

2019-07-10 14:05:20  阅读:161  来源: 互联网

标签:python python-2-7 django django-models django-1-10


我目前正在研究一个大型Django项目(版本1.10.7),并且在子应用程序中遇到模型字段的错误.这是基本结构的样子:

project/
    app_one/
        __init__.py
        apps.py
        models.py
        urls.py
        views.py
        app_two/
            __init__.py
            apps.py
            models.py
            urls.py
            views.py

有问题的模型和字段如下所示(project / app_one / app_two / models.py):

class SampleModel(model.Model):
    parent = models.ForeignKey('self', null=True, blank=True, related_name='members')

当我在根文件夹中运行python manage.py makemigrations app_one.app_two时,我收到以下错误消息:

File …/django/db/models/utils.py”, line 23, in make_model_tuple
“must be of the form ‘app_label.ModelName’.” % model ValueError: Invalid model reference ‘app_one.app_two.SampleModel’. String model
references must be of the form ‘app_label.ModelName’.

以下是其他相关文件的代码:

项目/ settings.py:

INSTALLED_APPS = filter(None, (
    ...
    'app_one',
    'app_one.app_two',
    ...
)

项目/ app_one / app_two / apps.py:

from __future__ import unicode_literals

from django.apps import AppConfig


class AppOneAppTwoConfig(AppConfig):
    name = 'app_one.app_two'
    label = 'app_one.app_two'

项目/ app_one / app_two / __ init__.py:

default_app_config = 'app_one.app_two.apps.AppOneAppTwoConfig'

我相信这里的错误是Django只找一个.在完整的模型名称(app_one.app_two.SampleModel)中将app标签与django / db / models / utils.py中的模型名称分开,并且由于在这种情况下有两个,它会失败.

我的问题是:这似乎是一个奇怪的Django不考虑…是否有保留应用程序标签的点符号,并仍然在子应用程序中自引用ForeignKey?

解决方法:

正如您所提到的,it seems to be a lookup error当项目因嵌套应用程序而尝试找到您的应用时.这可以通过在模型内部元类中使用app_label指定应用程序名称来解决:

class SampleModel(models.Model):
    ...
    class Meta:
        app_label = 'app_two'

标签:python,python-2-7,django,django-models,django-1-10
来源: https://codeday.me/bug/20190710/1424948.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有