人物と「Eprint」出版物との多対多関係を形成する以下のモデルがあります。各個人のプロフィールページでは、このテーブルを通して、だけショー= Trueの場合、参照e-プリントが表示され、「注文」欄の数字の順に:django.formsはどれくらい私を助けますか?
class UsersEprint(models.Model):
person = models.ForeignKey(Person)
eprint = models.ForeignKey(emodels.Eprint) # this has a .title field
show = models.BooleanField(default=True)
order = models.IntegerField(default=0)
さて、これは、すべての管理者から管理することができますが、ユーザーフレンドリーなフォームをサイトのユーザープロファイルページに入れたい。
理想的には、eprintのタイトル(編集不可)、「ショー」のティックボックス、「注文」の数値フィールドを含む、個人のeprintごとに1行のテーブルが必要です。 '削除'チェックボックスも便利です。
modelformsetsのデフォルトのアプローチでは、すべてのeprintをリストするeprintのドロップダウン・チューザーが表示されます。これは、フォームが編集したくないということを知らないためです。私は、フィールドやウィジェットをオーバーライドしてさまざまなアプローチを試しましたが、それはすべてちょっとしたクルージングに見えますが、私は最終的にテンプレートのフォームを行ごとにレンダリングするつもりです。
次の複雑さは、ユーザーがテーブル行を並べ替えるために番号を入力する代わりに、javascriptシステムを使用することができます - ドラッグする行をドラッグするか、矢印を上/下に移動します。ユーザーがフォームを送信すると、新しい注文が取得されます。
私の質問は、いつ私がdjangoのフォーム処理の範囲外に出ますか?私はちょうどインポートdjango.formsをドロップし、それを自分ですべて管理する必要がありますか?あるいは、最も厄介な形でも、そこにはまだ役に立つビットがありますか?
form.instanceプロパティは文書化されていますか?私はそれをソースで見ていますが、ドキュメントの中には何もありません。インスタンス=(例えばf = ArticleForm(インスタンス= a))でModelFormを作成する例がありますが、これはf.instanceがバインドされたオブジェクトを戻す方法であることを意味しません。モデルフォームとモデルオブジェクトの間の接続がどこにあるのか疑問に思っています...これは明らかですが、ドキュメント化されていないことが心配です。 – Spacedman
あなたはそうです...それは文書化されていません。私はそれが 'Model._meta'のようなものだと思っています。両方ともとても有用です。最終的にはコア開発者がそれらを公式APIの一部にすることを願っています。 もちろん、何かがうまくいけば:) – elo80ka