質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

Django管理画面から追加・変更ボタンでエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,421

kotatsu2

score 12

Djangoおよびプログラム初心者です。試行錯誤をしながらプログラムを作成しています。
スケジュール管理をしたくてスケジュールアプリを作成していますが、管理画面のエラーで困っています。
Djangoでアプリをsettings.pyに追加してmodels.pyを作成しました。migrate とmakemigrationsでもエラーなくすべてOKで終了したにもかかわらず、Django管理画面から項目の追加・変更をしようとボタンをクリックするとこのようなエラーになります。

開発環境:
Python3.7
Django 2.1.4
以下adminでのエラー表示

OperationalError at /admin/schedule/schedule/add/
no such table: student
Request Method:
GET
Request URL:
http://127.0.0.1:8000/admin/schedule/schedule/add/
Django Version:
2.1.4
Exception Type:
OperationalError
Exception Value:
no such table: student
Exception Location:
c:\users\775na\appdata\local\programs\python\python37\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 296
Python Executable:
c:\python\practice\Scripts\python.exe
Python Version:
3.7.1
Python Path:
['c:\\python\\practice\\project',
 'c:\\python\\practice\\Scripts\\python37.zip',
 'c:\\python\\practice\\DLLs',
 'c:\\python\\practice\\lib',
 'c:\\python\\practice\\Scripts',
 'c:\\users\\775na\\appdata\\local\\programs\\python\\python37\\Lib',
 'c:\\users\\775na\\appdata\\local\\programs\\python\\python37\\DLLs',
 'c:\\python\\practice',
 'c:\\python\\practice\\lib\\site-packages',
 'c:\\users\\775na\\appdata\\local\\programs\\python\\python37',
 'c:\\users\\775na\\appdata\\local\\programs\\python\\python37\\lib\\site-packages']


models.pyはこのように作成しました。まだ意味がよくわかっていないのでモデルの作り方が悪いかもしれません。

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone

# Create your models here.
class User(models.Model):
        #  blank=Falseは入力必須項目
        name = models.CharField(_('name'), max_length=30, blank=False)
        email = models.EmailField(_('email address'), unique=False)
        country = models.CharField(_('country'), max_length=50, blank=False)

class Steady(models.Model):
        # カテゴリーを作成
        steady = models.CharField(_('steady customer'), max_length=255, blank=True)

        class Meta:
                db_table = 'steady'

        def __str__(self):
                return self.steady

class Student(models.Model):
        # 名前だけ必須項目
        name = models.CharField(_('student name'), max_length=30, blank=False)
        sky_id = models.CharField(_('skype id'), max_length=50, blank=True)     # skypeID
        country = models.CharField(_('country'), max_length=50, blank=True)
        steady = models.ForeignKey(Steady, on_delete=models.SET_NULL, null=True)
        created_at = models.DateTimeField(default=timezone.now)
        # Studentモデルはstudentテーブルと紐づいている IDという主キーも自動で不可されている
        class Meta:
                db_table = 'student'

class Schedule(models.Model):
        # 同じフィールドで複数の項目をForeignKeyで参照するときはrelated_nameが必要。これでデータが取れる
        student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="student_name")
        lesson_date = models.DateTimeField(blank=False)
        article = models.CharField(_('article'), max_length=225, blank=True)
        detail = models.TextField(_('lesson content'))
        sky_id = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True, related_name="sky_add")    # skypeID
        created_at = models.DateTimeField(default=timezone.now)

        class Meta:
                db_table = 'schedule'


他のアプリを見よう見まねで真似して作成しているので、まだコードの意味がよくわかっていません。
エラーはSteady、Student、Scheduleでエラーになります。
モデルの作成で間違っている部分を教えていただけませんか?
またなぜそれが悪いのかも教えていただければ幸いです。
よろしくお願いいたします。

以下はwebページでのエラー

Error during template rendering
In template c:\users\775na\appdata\local\programs\python\python37\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 19
no such table: student

9            {% for field in line %}
10                <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
11                    {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
12                    {% if field.is_checkbox %}
13                        {{ field.field }}{{ field.label_tag }}
14                    {% else %}
15                        {{ field.label_tag }}
16                        {% if field.is_readonly %}
17                            <div class="readonly">{{ field.contents }}</div>
18                        {% else %}
19                           {{ field.field }} ←ここが赤く警告されています
20                        {% endif %}
21                    {% endif %}
22                    {% if field.field.help_text %}
23                        <div class="help">{{ field.field.help_text|safe }}</div>
24                    {% endif %}
25                </div>
26            {% endfor %}
27        </div>
28    {% endfor %}
29</fieldset>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

自己解決しました。
makemigrationsを実行して、migrateをしたはずなのですが、
再度、migrateをすると、無事にDjango管理画面に表示され、追加・修正することができるようになりました。ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る