gpt4 book ai didi

python - 子应用程序中 'self' 的外键在 Django 项目中的 makemigrations 上抛出错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:50 25 4
gpt4 key购买 nike

我目前正在处理一个大型 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'.

这是来自其他相关文件的代码:

project/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) 中寻找一个 . 来将应用标签与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 - 子应用程序中 'self' 的外键在 Django 项目中的 makemigrations 上抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com