2017-02-28 11 views
-1

単一クラスで多対多リレーションシップを複数使用できますか?ここに私の考えです:Django複数対多関係が動作しない

政策は、多くの言語
A言語に翻訳することができ、国が(でも、複数の言語で)多くの政策
政策は、多くの中で議論することができますを一覧表示することができ、多くの政策

を一覧表示することができます国

私はdjango、python3、mysqlを使用しています。私は円で行きます。多対多の関係が問題のようです。テーブルスルー多くの

多くは動作しない。 言語= models.ManyToManyField

円形のエラーメッセージの

手順(言語、= "Policy_Detail" を通じて):

別名P3 = "のpython3"

django.db.utils.OperationalError:

P3 manage.py
エラーメッセージ移行(1050 "テーブル 'policytracker_country' はすでに存在している")を滴下

policytracker_countryおよび他のすべてのpolicytrackerテーブル

P3のmanage.pyで入力

は、マイグレーションを作る
変更は
(1051年、 "不明なテーブル 'PolicyDB.policytracker_flag'")

を移行P3のmanage.pyで入力

を検出しません

mysql> show tables;
+ ------------------------------ +
| Tables_in_PolicyDB |
+ ------------------------------ +
| policytracker_country |
| policytracker_events |
| policytracker_policy_user |
| policytracker_website |
|ポリシートラッカーのウェブサイトフィルタ|
+ ------------------------------ +

はpolicytracker_flagとMySQL を用いpolicytracker_label_links(にもかかわらず添加Iドン
他のすべてのポリシートラッカーテーブルを削除しました

+ --------------------------- - +
| Tables_in_PolicyDB |
+ ---------------------------- +
| policytracker_flag |
| policytracker_label_links |
+ ---------------------------- +

P3 manage.py makemigrations
変化は

が検出されませんp3を管理します。+ -----------------(1146年、 "テーブル 'PolicyDB.policytracker_policy_detail' が存在しません")
:PY

django.db.utils.ProgrammingErrorを移行------------- +
| Tables_in_PolicyDB |
+ ------------------------------ +
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| policytracker_country |
| policytracker_events |
| policytracker_policy_user |
| policytracker_website |
|ポリシートラッカーのウェブサイトフィルタ|
+ ------------------------------ +

'policytracker.policy_detail'モデルクラスを 'policytrackerの前に移動しました。ポリシー」クラス
NameError:名 '政策は'

が定義されていない
P3 manage.py makemigrations
変更は

P3 manage.py
「表移行検出されなかっ戻ってそれを移動 'policytracker_country' はすでに存在する "
...最初からエラーメッセージが表示されます

何が間違っていますか?ここではモデルがあります:あなたが助け

class Website_Filter(models.Model): ...

class Language(models.Model): 
     iso_language     = models.CharField(max_length = 2, primary_key=True) 
     flag_image_filename    = models.CharField(max_length = 10, default='en.png') 
     nav_section_policy_list_title = models.CharField(max_length = 30, default='Policies') 
     ... 

    class Country(models.Model): 
     language_country_code   = models.CharField(max_length = 5, primary_key=True, default="en/ca") 
     country_name     = models.CharField(max_length = 50) 

    class Policy(models.Model): 
     image_filename = models.CharField(max_length = 30) 
     start_date  = models.DateField(default = None) 
     languages  = models.ManyToManyField(Language, through="Policy_Detail") 
     countries  = models.ManyToManyField(Country) 

    class Policy_Detail(models.Model): 
     policy   = models.ForeignKey(Policy) 
     language   = models.ForeignKey(Language) 
     needs_translation = models.BooleanField(default = True) 
     name    = models.CharField(max_length = 50) 
     description1  = models.TextField() 
     description2  = models.TextField() 
     description3  = models.TextField() 
     twitter_handle = models.CharField(max_length = 30, default='') 
     subreddit   = models.CharField(max_length = 30, default='') 

    class Website(models.Model): 
     name   = models.CharField(max_length = 20, unique=True) 
     ip_address  = models.GenericIPAddressField() 
     link   = models.CharField(max_length = 50) 
     is_pending  = models.BooleanField() 
     is_allowed  = models.BooleanField()     

    class Official_Site(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Interviews(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Frequently_Asked_Questions(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Articles(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Books(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Petitions(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Actions(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Rallies(Website): 
     policy = models.ForeignKey(Policy_Detail) 

    class Events(models.Model): 
     policy = models.ForeignKey(Policy_Detail) 
     event_date  = models.DateField(null=True) 
     ... 

    class Policy_User(models.Model): 
     country   = models.ForeignKey(Country) 
     username   = models.CharField(max_length = 30, default="Anonymous") 

    class Vote(models.Model): 
     policy   = models.ForeignKey(Policy) 
     p_user   = models.ForeignKey(Policy_User) 
     voting_date  = models.DateField(auto_now_add = True) 
     week_number  = models.IntegerField(default = 1) 
     vote_code   = models.IntegerField(default = 1) 

感謝のために。

+1

はい、1つのクラスで複数の多数の関係が可能です。あなたはあなたがどんな問題を抱えているのか、より具体的になりますか?あなたが得ている正確なエラーメッセージは何ですか?具体的には「実装する」ことによって何を意味していますか?あなたは何をしようとしているのですか? – ChidG

+0

@ChidG編集された質問を見る –

+0

@ChidG私のポリシークラスでは、models.ManyToManyField(Language、through = "PolicyLanguage")にlanguage = models.ManyToManyField(言語、through = "Policy_Detail")を変更し、p3を実行し、p3を移行し、エラーが発生しました: django.db.utils.ProgrammingError:(1146、 "'PolicyDB.policytracker_policy_detail'テーブルが存在しません) –

答えて

0

これは、移行がデータベースの状態と同期していない場合の問題によく似ています。私は多くの分野が多くの分野を主な課題とは考えていませんが、マイグレーションをより複雑にすることで悪化させるかもしれません。

個々の移行を実行したり、手動で移行をデータベースで完全にマークするなど、問題を解決する可能性はありますが、ここでは問題を解決するための最も簡単でクリーンな方法があります。データベースにはまだデータがありません。

  1. データベースからすべてのテーブルを削除します。
  2. すべてのDjangoアプリディレクトリのmigrationsディレクトリを削除してください。
  3. manage.py makemigrationsを実行し、次にmanage.py migrateを再度実行します。
関連する問題