7360


djangoで開発を進めています。djangoでmodelの設定が、runserverで立ち上げたadminページに反映されないことで困っています。どなたか原因のわかる方がいれば、ご教授いただけると幸いです。

# 背景

  1. model.pyにモデルクラス`TestModel(models.Model)`を記載しました。そのモデルは`sampleField = models.CharField(max_length='20')`のフィールドを含んでいます。
  2. admin.pyにその`TestModel`を`register`しました。syncdb、makemigrations等を行い、そして以下のコマンドで開発サーバーを立ち上げました。
[code]     python manage.py runserver

    
[/code]

  3. `http://localhost:8000/admin`からログインしました。そのモデルでレコードを追加していたところ、sampleFieldにブランクを設定したいということになりました。

  4. model.pyの対応する`sampleField = models.CharField(max_length='20')`を`sampleField = models.CharField(max_length='20',blank=True,null=True)`に変更し、makemigrationsおよびsyncdbを実施しました。
  5. 再度adminページからレコードの追加を試みましたが、`sampleField`で以下のエラーが発生しました。

> This field is required.

  6. model.pycが存在することが原因かと考え、削除しました。また、開発サーバーを念のため以下のコマンドで再起動しました。しかし、同様のエラーが発生しました。
[code]     python manage.py runserver

    
[/code]

  7. htmlのキャッシュが原因かと考え、ブラウザのキャッシュを削除しました。しかし、同様にエラーが発生しました。

  8. djangoのdbキャッシュがあるのかと考え、以下のコマンドで削除しました。ですが、エラーが発生しました。
[code]     python manege.py shell;from django.core.cache import
cache;cache.clear()

    
[/code]

  9. htmlが反映されていないようにたので、`TestModel(models.Model)`に`sampleField2 = models.CharField(max_length='20',blank=True,null=True)`を追加し、makemigrationsおよびsyncdbを実施し、開発サーバー再起動、adminページへのアクセスを実施しました。adminページでは、`sampleField2`の入力項目が表示されていませんでした。

どこかにhtmlのキャッシュがたまっている？かと思っていますが、どこから削除すれ良いかわかりませんでした。どなたか上記問題の解決策がわかれば、ご教授ください。

よろしくお願いします。

# 追記

ローカル環境で、設定を実施していた際は、htmlが反映されなかったのですが、Apacheの立ち上がっているWEBサーバーにpushして、そこで確認してみると、問題なく起動されました。  
runserverで立ち上げたサーバの挙動がイマイチ理解できていないようです。

# 解決報告

下記の流れで、本件が発生しておりました。私のミスでした。色々ご迷惑をおかけしました。

  1. ターミナルAにて、bashを利用し、プロジェクトリポジトリ`/home/myname/myDjangoProject`にて`python manage.py runserver`を実行。
  2. 別にターミナルBを起動し、`/home/myname/myDjangoProject`で、model.py等を編集。
  3. サーバー上のリポジトリにpushする際に、コンフリクトが発生したので、ターミナルBにて`/home/myname/myDjangoProject`を`/home/myname/_myDjangoProject`にリネーム。サーバー上のリポジトリをローカルに再度、cloneし、作業を再開。
  4. ここまでが背景の１から３に隠れていました。その後、背景の４以降を実施。

ターミナルAが参照しているディレクトリは、実は、`/home/myname/_myDjangoProject`であったが、pwdの実行結果は`/home/myname/myDjangoProject`となるため、ワーキングディレクトリがズレていることに気付きませんでした。そのため、今回のように設定が反映されないと考えていました。

参照先のDBがズレていないかとご指摘いただいたことで、参照していたsqlite3を確認しようと、ターミナルAでrunserverを停止し、`open
.`を実行したところ、今回の問題に気付きました。

ご迷惑おかけしました。そして、色々ありがとうございました。  
（タイトルは本質からズレていますが、どのように修正したら良いのでしょう。）


CC BY-SA 3.0
2015-03-02T22:24:24.630
7337
2015-03-03T12:58:22.387
2015-03-03T12:58:22.387
7834
7834
question
python django
djangoのadminページのhtmlキャッシュ削除について


(ドキュメントを読み返して、回答自体がドキュメントを誤読したうえで作成してしまっている可能性があるので、一旦取り消します)


CC BY-SA 3.0
2015-03-03T02:14:59.047
7343
2015-03-03T07:24:46.100
2015-03-03T07:24:46.100
2784
2784
7337
answer


問題の状況が見えないので、示唆レベルの回答です。

  * `python manage.py runserver` で起動 & デフォルトのキャッシュ設定の場合、キャッシュはとくに残りません。
  * `python manage.py runserver` で起動する場合はファイルに変更があればサーバーは自動で再起動されます。
  * Django 1.7 でしたら `syncdb` で問題ありません。内部的に `migrate` が実行されます。該当コード <https://github.com/django/django/blob/1.7.5/django/core/management/commands/syncdb.py#L27>

以下の確認が必要そうです。

  * migrationファイルが正しく作成、適応されているか
  * 確認中のアプリサーバーは作成、適応したDBを正しく参照しているか
  * 確認中のアプリサーバーは正しく再起動しているか  
  

    * とりあえずはローカル環境で、`runserver` と `sqlite` のデータベースで動作確認するのが良さそうです。
  

また、エラーが発生したのであればエラー内容を書いていただけると回答の役に立ちそうです。

(信用度が足りなくて回答へのコメントとかができない!!)


CC BY-SA 3.0
2015-03-03T05:55:07.297
7360
2015-03-03T06:07:36.803
2015-03-03T06:07:36.803
2798
2798
7337
answer