2009-06-24 28 views
3

私は自分のプロジェクトでさまざまなオープンソースのアプリケーションを使用しようとしています。問題は、独自のモデル定義で2つの異なるアプリケーションで使用されているモデル名が同じであることです。Django:モデル名の衝突

私が使用してみました:

class Meta: 
     db_table = "db_name" 

をそれはうまくいきませんでした。私はまだsyncdbでフィールド名の衝突のエラーを取得しています。助言がありますか。

更新

私は実際にPinaxとサッチモを統合しようとしています。エラーは次のとおりです。

Error: One or more models did not validate:

contact.contact: Accessor for field 'user' clashes with related m2m field 'User.contact_set'. Add a related_name argument to the definition for 'user'.

friends.contact: Accessor for m2m field 'users' clashes with related field User.contact_set'. Add a related_name argument to the definition for 'users'.

テーブル名は既に一意です。私はモデルを分析し、Model 'Contact'は2つの異なるアプリケーションの2つのモデルにあります。これらのモデルの1つをコメントアウトすると、うまく動作します。

両方のアプリがPYTHON_PATHにあり、他のアプリが同じ名前のモデルを定義するとクラッシュが発生するため、エラーが発生する可能性があります。

+2

確かに、さまざまなアプリのアプリラベルは競合のリスクを軽減するはずです。エラーの詳細を教えてください。 –

+1

Yepp、dbテーブルのパターンは " _ "となり、競合は起こりにくいでしょう。少なくとも私はPostgreSQLで見ているものです。 失敗したsyncdb実行の実際のoutpoutなど、より多くのデータを入力してください – Ber

+0

アプリケーションを2回追加しましたか?実際のエラーメッセージに加えて、settings.pyからINSTALLED_APPS設定を投稿してください。 –

答えて

6

SatchmoとPinaxの両方に、ForeignKey to UserというContactモデルがあるという問題があります。 Djangoは、ForeignKeysのそれぞれに対してUserに「contact_set」逆引き関係属性を追加しようとします。そのため、衝突があります。

解決策は、PinaxのContactモデルのForeignKey、またはSatchmo Contactモデルの引数としてrelated_name = "pinax_contact_set"のような引数を引数として追加することです。そのためには、ソースを直接編集する必要があります。あなたはmonkeypatchingでそれを行う方法を見つけることができるかもしれませんが、私はそれが難しいと思うでしょう。