6

こんにちは私はsqlite3データベースを使用してdjangopythonアプリケーションに取り組んでいます。私のmodels.pyで定義されているdjangoのユーザーモデルを次のように拡張します。

#Account Model
class Account(models.Model):
  user = models.OneToOneField(User)
  avatar_url = models.CharField(max_length=200)
  profile_url = models.CharField(max_length=200)
  account_type = models.CharField(max_length=60, choices=choices.ACCOUNT_TYPE)

また、次のように定義されAccount objectたハンドラーとを作成するメソッドがあります。post_save

#Function to Create user Account/Profile
def create_user_account(sender, instance, created, **kwargs):
  if created:
    models.Account.objects.create(user=instance)

#Create User / User Registration
def UserRegistration(request):
  if request.method == 'POST':
    username = request.POST['fn'].capitalize() + ' ' + request.POST['ln'].capitalize()
    # CREATE USER
    newuser = User.objects.create_user(username=username,
                                       email=request.POST['email'],
                                       password=request.POST['pw'])
    newuser.save()
  return HttpResponse(username)

#Post Save handler to create user Account/Profile
post_save.connect(create_user_account, sender=User)

これで、新しいユーザーを登録しようとすると、次のデータベースエラーが発生します。

DatabaseError at /register/

table engine_account has no column named user_id

Request Method:     POST
Request URL:    http://localhost:8000/register/
Django Version:     1.4
Exception Type:     DatabaseError
Exception Value:    

table engine_account has no column named user_id

Exception Location:     /usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/backends/sqlite3/base.py in execute, line 337
Python Executable:  /usr/bin/python
Python Version:     2.7.3

そして私はその"user_id"分野がどこから来ているのか分かりません..何かアイデアはありますか?

PS:

テーブルengine_accountは、基本的に、Accountという名前のアプリケーションのクラスです。Engine

4

3 に答える 3

10

syncdbを実行した後、models.pyを編集しましたか?

その場合は、手動でテーブルを編集するか、以下を使用してデータベースを再作成する必要があります。

python manage.py syncdb

プロジェクトディレクトリで変更を適用します。


アップデート2019:syncdbDjango1.9以降では非推奨になりました。使用する

python manage.py makemigrations <app_name>
python manage.py migrate --run-syncdb

2020年の更新:回答にさらに説明を追加したいと思います。

この問題は、モデルと対応するテーブルが一致しない場合に発生します。これは、モデルを変更したが、変更を移行していないことを意味します。makemigrationsとコマンドの違いがわからないものもありmigrateます。より明確にするために、私は違いを説明しようとします:

./manage.py makgemigrations <app_name>:特定のアプリのモデルの変更は、以前の移行と比較されます。何app_nameも指定されていない場合、追跡対象のすべてのアプリが制御され、変更がある場合は移行が作成されます。各アプリには移行ディレクトリがあり、このコマンドはこのディレクトリ内に関連する移行を作成します。移行が作成されると、DBに変更がないため、移行を適用する必要があります。移行を適用しない場合でも、同じエラーが発生します。

./manage.py migratemakemigrationsコマンドによって作成された移行はDBに適用されます。実稼働環境に移行するときは注意が必要です。

./manage.py showmigrations:このコマンドは、移行のステータスを一覧表示し、移行が適用されているかどうかを確認できます。通常、ステータスはDBに保存されますが、dbに接続してデータをクロールする必要はありません。このコマンドは、明確な入力を提供します。

于 2012-06-24T08:00:39.390 に答える
9

syncdbdjango1.9以降のバージョンでは非推奨です。したがって、djangoバージョン1.9以降では、実行python manage.py makemigrations <app-name>してからpython manage.py migrate

于 2017-04-06T07:58:07.737 に答える
3

私は試し python manage.py syncdbましたが、それだけでは不十分だったので、解決策は次のとおりでした:

削除 してファイルmigrations fileを削除し ましたdb.sqlite3

私は実行python manage.py makemigrationsし、また python manage.py migrate

ビンゴ!

于 2021-06-06T11:43:12.203 に答える