2016-04-27 10 views
1

私はDjango-quizアプリを使用しているWebページで作業しています。 django-quizをインストールすると、Adminにクイズや質問などを作成できます。サードパーティのアプリモデルにフィールドを追加するにはどうすればよいですか?

残念ながら、私はモデルQuizにフィールドLanguageを追加する方法方法、を探しています私のモデルLanguageQuizを割り当てる方法、方法はありません。

私はこれを試しましたが、うまくいきません。私はすでにフィールドを追加してプロキシモデルを作成しようとしましたが、プロキシモデルでは不可能であることに気付きました。

from quiz.models import Sitting,Quiz 

class QuizAddLanguage(models.Model): 
    quiz = models.OneToOneField(Quiz) 
    language = models.ForeignKey(Language) 

サードパーティのアプリケーションモデルにフィールドを追加するにはどうすればよいですか?

+0

言語はクイズにどのような関係がありますか? 1(言語)から多くのクイズへ? – Sayse

+0

この場合、OneToOneで十分です。各言語ごとに1つのクイズがあります。 –

+1

[Django - サードパーティのモデルを変更せずに拡張する方法]の可能な複製(http://stackoverflow.com/questions/3433131/django-how-to-extend-3rd-party-models-without-modifying) – Sayse

答えて

1

この時のために、OneToOneは十分なはずですが - 言語ごとにその一対一ので1つのクイズ

があるでしょう、あなたは単にデフォルトでDjangoは、自分自身の言語クラスの関係を定義することができます逆引き参照の意味を提供します

language_obj.quiz 
quiz_obj.language 

の両方が有効です。ここで

+0

ああ、ありがとう、これは非常にエレガントなソリューションです。しかし、私はモデルの選択 '言語'フィールドを 'クイズ'フィールドで見ることができません。どうすればいい?私は管理クラスQuizInlineLanguage(admin.StackedInline)を変更することを考えていました: fields = [Quiz.language]; (Quiz)登録を解除する(Quiz、QuizInlineLnaugage)が、クイズは登録されていないと言われています。 –

+0

@ミラノ - あなたのコメントは分かりませんでしたが、別の問題であるモデル管理クラスについて話しているように聞こえます – Sayse

+0

言語モデルをクイズモデルに追加して、クイズに言語を割り当てることができます。しかし、それは管理者がクイズを作成する場所であるため、管理者でも機能させる必要があります。 –

0

は6年前に "WONTFIX" の解像度で閉鎖した関連Djangoのチケット、次のとおりです。

https://code.djangoproject.com/ticket/14969

私はthis commentは、いくつかの良い情報を提供すると思う:

コメントができますあなたはこの問題を扱う*正しい*方法 - インターフェースを定義し、モデルそのものをプラガブルにします。すべてのDjangoのcontribアプリケーションがこのアプローチに従っているわけではありませんが、それはコアにmonkeypatchingを焼くことを意味するわけではありません。私たちはcontribアプリケーションを修正します。

django.contrib.commentsはスタンドアロンアプリになりましたが、まだそれ自体は比較的簡単にカスタマイズすることができます。ここでは、関連するドキュメントは次のとおりです。

https://django-contrib-comments.readthedocs.io/en/latest/custom.html

サードパーティ製のアプリはカスタマイズすること自体は簡単にしていない場合、私はそれを更新するために、開発者を求めて提案し、どのように上の例については、上記のリンクにそれらを指すことになりそれについてやってみよう。

関連する問題