1

何らかの理由で、 Django で作成された Db を確認したい。私は command = python manage.py inspectdb > inspectdb.txt I get to see = models.CharFieldin place in expected = models.FileField、一方、models.pyには正しいものがありますがmodels.FileField、Dbには確かにmodels.FileFieldFiles = .csv を保存できるものがあります。この場合は正しく。

私の質問 - なぜ inspectdb 、モデルフィールドの表示が異なるのですか、これについてもっと学ぶ方法はありますか?

リンクされた質問 - https://stackoverflow.com/a/48739612/4928635

4

2 に答える 2

1

FileFieldaはデータベース側ではa であるため、これは完全に理にかなっていますvarchar。データベースはファイルの内容を保存しませ。ディスク (または別のストレージ エンジン) 上のファイルの保存場所へのパスをデータベースに保存します。

したがって、データベース側ではまったく違いはありません。それを異なる方法で処理するのは Djangoロジックだけです。後でデータベースを分析し、そこから Django モデルを生成しようとしても、もちろん違いは見られません。

したがって、このinspectdbツールは、データベースを構築する移行ファイルの (完全な) 逆のものではありません。inspectdbデータベース側で型を実際に型チェックするモデルを作成するだけです。ただし、Django モデルは、データベース テーブルの対応物よりもロジックの点でより「リッチ」です。通常、実行後inspectdb、フィールドが適切な検証などを行うようにするために、いくつかの「足場」が必要になります。

于 2019-09-04T16:56:46.077 に答える