2009-07-24 4 views
1

私はpython/djangoの新機能です。私はdjangoモデルに任意の数のフィールドを格納する必要があります。私はdjangoがこれを処理する何かを持っているのだろうかと思っています。djangoモデルに任意の数のフィールドを格納する方法は?

通常、これを行うには、いくつかのXMLを列に格納します。 djangoは、これがXMLなのか他の(より良い)メソッドなのかを容易にするいくつかのクラスを提供していますか?

おかげで、 ピート

+0

今後、私たちはDjangoで使用するNoSQLアダプタを選択できるかもしれないことに注意してください。 GoogleはappengineにBigTableサポートを追加しました.CouchDBアダプタでは早い段階で作業が行われています。 – sixthgear

答えて

11

は、この問題を解決するためのアプローチがたくさんありますし、あなたの状況に応じてそれらのいずれかが動作する可能性があります。 TextFieldを使用して、XMLやJSONなどのテキストを格納することもできます。 Pythonのpickle機能と組み合わせることで、より洗練された処理を行うことができます。あなたはDjangoSnippets上のDjangoのピクルスフィールド定義に見えるかもしれません

http://www.djangosnippets.org/snippets/513/

あなたがフィールドにPythonの辞書をダンプすることができます、あなたはそれらのフィールドを参照するときは、辞書への容易なアクセスを得ることができるように、いくつかの操作を行いますXMLや何かを再解析する必要はありません。

他のシリアライズフォーマットでも同様のことをするカスタムフィールド定義を書くことができますが、その有用性がわかりません。

また、モデルをリファクタリングしてManyToManyフィールドを利用することもできます。ジェネリックキー、バリューペアのモデルを作成してから、プライマリモデルにそのジェネリックキー、バリューモデルに対するM2Mリファレンスを持たせることができます。その方法では、など、データを参照するために、DjangoのORMの多くを活用することができ

+0

非常に良い答え、多くのオプションを提示、ありがとう! – slypete

+0

+1私は長い返信を入力し、あなたがそれをより明瞭に述べていることを認識してから、返信を削除しました。 – sixthgear

+0

これは、私が非常に有用であるかどうかわからなかったことを教えてくれました! –

0

ありXMLフィールドが提供されています: http://docs.djangoproject.com/en/dev/ref/models/fields/#xmlfield

しかし、それは結果のクエリに余分な解析を行うためにあなたを強制します。 (私はあなたがある程度やらなければならないと思う)...

私は単なるcharフィールドにunicode(mycolumnlist)というリストをダンプすることを考えました。そのような後:

class DumbFlexModel(models.Model): 
    available_fields = models.CharField() 
    field1 = models.CharField() 
    field2 = models.CharField() 
    field3 = models.CharField() 
    ... 

その方法は、少なくとも、あなたがのためにvaulesを取得しようとしているフィールドを持つものだけに結果をフィルタリングするavailable_fields上のクエリが含まれて実行することができたが、その後の位置は、あなたがしたいので、任意ですまだ各結果とプロセスを通過する必要がありますavailable_fieldsは値の位置を取得します。

また、シリアル化された()pickle.dumps())辞書のリストをダンプすることはできますか?

他の提案に興味があります。

関連する問題