2017-01-20 34 views
0

django 1.7にアップグレードする必要があります(1.8など、段階的に優先します)。私は実際にはDjango 1.6.11です。Django 1.7にアップグレードした後にリレーションが存在しません

一部のモデルではadminというアプリがあるので、AppConfigでいくつかの変更を加えなければなりませんでした。

# apps/admin/apps.py 

from django.apps import AppConfig 

class AdminConfig(AppConfig): 
    name = 'admin' 
    label = "Our Admin" 


# project/settings/common.py 

INSTALLED_APPS = (
    'admin.apps.AdminConfig', # our custom admin 
    ... 

# apps/admin/models.py 

class CastingProfile(models.Model): 

    user = models.OneToOneField(User, primary_key=True) 
    total_casted = models.PositiveIntegerField(default=0) 
    article_price = models.FloatField(default=0.03) 
    ... 

今、私は私のカスタム管理者にアクセスしようとすると、私はこのエラーがあります:

Exception Type: ProgrammingError 
Exception Value:  
relation "Our Admin_castingprofile" does not exist 
LINE 1: ...t", "Our Admin_castingprofile"."video_price" FROM "Our Admin... 

IPDB:

ipdb> CastingProfile.objects.get(user=user) 
*** ProgrammingError: relation "Our Admin_castingprofile" does not exist 
LINE 1: ...t", "Our Admin_castingprofile"."article_price" FROM "Our Admin... 
                  ^

私が更新する移行を実行する必要がありますかDBや私は何かが恋しい?

EDIT:

私はDjangoの1.7重複したラベルからとラベル= "admin" を使用することはできませんが許可されていません。

# apps/admin/models.py 

class CastingProfile(models.Model): 

    user = models.OneToOneField(User, primary_key=True) 
    total_casted = models.PositiveIntegerField(default=0) 
    article_price = models.FloatField(default=0.03) 
    ... 
    class Meta: 
     db_table = "castingprofile" 
    ... 

はEDIT:

Exception Type: ProgrammingError 
Exception Value:  
relation "castingprofile" does not exist 
LINE 1: ..."last_count", "castingprofile"."article_price" FROM "castingpr... 

そして、ここでは、私は変更を加え、このアプリのモデルです:= "your_table_nameは" エラーを以下につながるDB_Tableの使用

作品! 素晴らしいですが、私はちょうどe-satisの最後のアドバイスに続いてdb_tableに "castingprofile"の代わりに "admin_castingprofile"を追加しなければなりませんでした。 を実行すると、テーブルの名前がわかりました。この値は、テーブルの名前を条件付ける

label = "Our Admin" 

答えて

0

問題がから来ています。 SQLがJOINを出力する最後のエラー行で確認できます。

これまでにこのデータを含むテーブルがあったので、前の名前を保持する必要があります。私はここにいた「admin」を名前を推測している:

class AdminConfig(AppConfig): 
    name = 'admin' # python path to the app module 
    label = 'admin' # unique name for the app. Used for the table 
    verbose_name = 'Our admin' # name you can read as a human 

を使用すると、ラベルとして「管理者」を使用することはできません何らかの理由ならば、このような「our_admin」として有効なPython識別子であるラベルを使用しますラベルのために。次に、このアプリの各モデルのために、明示的にテーブル名を宣言します。

class Stuff(models.Model): 
    class Meta: 
     db_table = 'name_of_your_table' 

あなたは彼らがすでに作成されているので、各モデルの適切なテーブル名を取得するには、あなたのデシベルを検査する必要があります。しかし、最初の方法がうまくいかなかった場合にのみ行ってください。