Django 3 NameError:名前 'model_name'が定義されていません

エレナ・カルバリド

私はこの質問が出てきたことを知っていますが、多くの回答は古いバージョンのDjangoとPythonに言及しています。私はDjango3とPython3を実行しています。プロジェクトの他に、各モデルを「models」フォルダーの下の独自のファイルに分割することにしました。以下のツリー構造を参照してください。

├── db.sqlite3
├── manage.py
├── poi
│   ├── admin.py
│   ├── apps.py
│   ├── CHANGELOG.md
│   ├── fabfile.py
│   ├── __init__.py
│   ├── LICENSE
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_auto_20210104_1048.py
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       ├── 0001_initial.cpython-38.pyc
│   │       ├── 0002_auto_20210104_1048.cpython-38.pyc
│   │       └── __init__.cpython-38.pyc
│   ├── models
│   │   ├── __init__.py
│   │   ├── layer.py
│   │   ├── poi.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-38.pyc
│   │   │   ├── layer.cpython-38.pyc
│   │   │   ├── poi.cpython-38.pyc
│   │   │   └── tag.cpython-38.pyc
│   │   └── tag.py
│   ├── models.py

私たちのモデル/ init .pyには、次のものがあります。

    from .poi import Poi
    from .tag import Tag
    from .layer import Layer

私たちのmodels / poi / poi.pyには、次のものがあります。

from django.db import models
from .tag import Tag
from .layer import Layer


class Poi(models.Model):
    ...
    ...
    tags = models.ManyToManyField('Tag', through='Layer')


    def __str__(self):
        return self.name

私たちのmodels / poi / tag.pyには、次のものがあります。

from django.db import models
import poi.models.poi
import poi.models.layer


class Tag(models.Model):
    name = models.CharField(max_length=100)
    pois = models.ManyToManyField('Poi', through='Layer')


    def __str__(self):
        return self.name

私たちのmodels / poi / layer.pyには、次のものがあります。

from django.db import models
import poi.models.poi
import poi.models.tag


class Layer(models.Model):
    poi = models.ForeignKey(Poi, on_delete=models.CASCADE)
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)

python3 manage.pymakemigrationsを実行するとエラーが発生します。エラー:

File "/media/elena/DATA2/Python-projects/osm-pois/osm-pois/upoi/poi/models/layer.py", line 8, in Layer
    poi = models.ForeignKey(Poi, on_delete=models.CASCADE)
NameError: name 'Poi' is not defined

layer.pyにインポートする他の方法を試しました。

from .poi import Poi
from .tag import Tag

しかし、それは私たちに次のエラーを与えました:

File "/media/elena/DATA2/Python-projects/osm-pois/osm-pois/upoi/poi/models/layer.py", line 2, in <module>
    from .poi import Poi
ImportError: cannot import name 'Poi' from partially initialized module 'poi.models.poi' (most likely due to a circular import) (/media/elena/DATA2/Python-projects/osm-pois/osm-pois/upoi/poi/models/poi.py)

これを解決する方法のアイデアはありますか?ありがとう!

エレナ・カルバリド

@ TonySuffolk66が完璧に機能したので、コメントで提案したことを回答として投稿しています。再度、感謝します!

モデルは異なるファイルで定義されているため、次のようにしてみてください。poi= models.ForeignKey( 'Poi'、on_delete = models.CASCADE)これは、参照名ではなく、モデル名に文字列を使用しています。Djangoの初期化方法が原因で、このような他のモデルを「簡単に」インポートすることはできません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Django NameError:名前 'bPath'が定義されていません

分類Dev

Python Django NameError:名前 'datetime'が定義されていません

分類Dev

NameError:名前 'django_filters'が定義されていません

分類Dev

Python 3:NameError:名前 'sklearn'が定義されていません

分類Dev

NameError:name'ResidentialReference 'が定義されていません[Django-ImageKit]

分類Dev

Django NameError name'request 'が定義されていません

分類Dev

NameError:名前 'name'はdjangoビューのrequest.POST.getで定義されていません

分類Dev

djangoエラーNameError:名前 'DEBUG'が定義されていません

分類Dev

Django NameError:名前 'モデル'が定義されていません

分類Dev

Python Django NameError:名前 'モデル'が定義されていません

分類Dev

DjangoとTinyMCE:NameError:名前 'url'が定義されていません

分類Dev

NameError:名前 '名前'はdjango形式で定義されていません

分類Dev

NameError:名前 'q'が定義されていません(python3のみ)

分類Dev

Python 3:「NameError:名前 '関数'が定義されていません」

分類Dev

NameError:名前 'python3'が定義されていません[Jenkins]

分類Dev

Python NameError:名前 'file_name'が定義されていません

分類Dev

Python 3 execメソッド:NameError:定義された関数の名前が定義されていません

分類Dev

Python 3 execメソッド:NameError:定義された関数の名前が定義されていません

分類Dev

Python-NameError:geventを使用している場合、名前 'PROTOCOL_SSLv3'が定義されていません

分類Dev

NameError:Djangoフォームでは、名前「リクエスト」が定義されていません

分類Dev

Django:名前 'SignupFormExtra'が定義されていません

分類Dev

Python3の不和セルフボットNameError:名前 'トークン'が定義されていません

分類Dev

名前 'classification_model'が定義されていません

分類Dev

名前 'linear_model'が定義されていません

分類Dev

Djangoエラー:NameError名 'db_table'が定義されていません

分類Dev

Python3 NameError:定義された@staticmethodに対して名前 'メソッド'が定義されていません

分類Dev

NameError:グローバル名 'unicode'が定義されていません-Python 3

分類Dev

Django:NameError:スラッグが定義されていません

分類Dev

NameError:名前 'anon_session_score'はdjango1.10で定義されていません

Related 関連記事

  1. 1

    Django NameError:名前 'bPath'が定義されていません

  2. 2

    Python Django NameError:名前 'datetime'が定義されていません

  3. 3

    NameError:名前 'django_filters'が定義されていません

  4. 4

    Python 3:NameError:名前 'sklearn'が定義されていません

  5. 5

    NameError:name'ResidentialReference 'が定義されていません[Django-ImageKit]

  6. 6

    Django NameError name'request 'が定義されていません

  7. 7

    NameError:名前 'name'はdjangoビューのrequest.POST.getで定義されていません

  8. 8

    djangoエラーNameError:名前 'DEBUG'が定義されていません

  9. 9

    Django NameError:名前 'モデル'が定義されていません

  10. 10

    Python Django NameError:名前 'モデル'が定義されていません

  11. 11

    DjangoとTinyMCE:NameError:名前 'url'が定義されていません

  12. 12

    NameError:名前 '名前'はdjango形式で定義されていません

  13. 13

    NameError:名前 'q'が定義されていません(python3のみ)

  14. 14

    Python 3:「NameError:名前 '関数'が定義されていません」

  15. 15

    NameError:名前 'python3'が定義されていません[Jenkins]

  16. 16

    Python NameError:名前 'file_name'が定義されていません

  17. 17

    Python 3 execメソッド:NameError:定義された関数の名前が定義されていません

  18. 18

    Python 3 execメソッド:NameError:定義された関数の名前が定義されていません

  19. 19

    Python-NameError:geventを使用している場合、名前 'PROTOCOL_SSLv3'が定義されていません

  20. 20

    NameError:Djangoフォームでは、名前「リクエスト」が定義されていません

  21. 21

    Django:名前 'SignupFormExtra'が定義されていません

  22. 22

    Python3の不和セルフボットNameError:名前 'トークン'が定義されていません

  23. 23

    名前 'classification_model'が定義されていません

  24. 24

    名前 'linear_model'が定義されていません

  25. 25

    Djangoエラー:NameError名 'db_table'が定義されていません

  26. 26

    Python3 NameError:定義された@staticmethodに対して名前 'メソッド'が定義されていません

  27. 27

    NameError:グローバル名 'unicode'が定義されていません-Python 3

  28. 28

    Django:NameError:スラッグが定義されていません

  29. 29

    NameError:名前 'anon_session_score'はdjango1.10で定義されていません

ホットタグ

アーカイブ