2016-08-02 2 views
1

私はUserQuestionを質問したいとしましょう:"次の動物を最大から最小まで注文する"。ここでは少し単純化されたジャンゴです:動的に可変な数のオブジェクトの順序を格納する方法(Pythonで)?

class Question(models.Model): 
    text = models.CharField()   #eg "Order the following animals..." 

class Image(models.Model): 
    image = models.ImageField()  #pictures of animals 
    fk_question = models.ForeignKey(Question) 

今、私は、各QuestionImage秒の可変数を割り当て、質問のテキストをカスタマイズすることができます。わーい。

回答を記録する適切な方法は何でしょうか?

class Response(models.Model): 
    fk_user = models.ForeignKey(User) 
    fk_question = models.ForeignKey(Question) 

をしかし、今、私はこだわっている:もちろん、私はUserQuestionへの外部キーが必要になります。このUserが指定したImageオブジェクトの順序をどのようにしてエレガントに記録しますか?

編集:私は、一般的に強く列のデータをカンマ区切りの保存に反対しています

答えて

1

のPostgres 9.5を使用しています。しかし、これはルールの例外のようです! CommaSeparatedIntegerFieldを提案してもよろしいですか?

クラスCommaSeparatedIntegerField(MAX_LENGTH =なし、**オプション)[ソース]
¶カンマで区切られた整数のフィールド。 CharFieldの場合と同様に、 のmax_length引数が必要であり、データベースに関するノート の移植性に注意する必要があります。

これは基本的にチャーフィールドなので、入力した順序はdbに保持されます。

あなたのデータベースについて言及していません。あなたがPostgresql上にあり、django 1.9を使用するのに十分なのであれば、ArrayFieldも使用できます。

arrayfieldを使用すると、文字列とリストの間で前後に変換することができなくなるので、はるかに優れています。コンマ区切りフィールドの場合は、検索が難しく、N番目の要素を簡単に取得できないということです。 POstgresql配列は、後者の困難を取り除きます。

+0

私はPostgresと1.9.6を使用しています(おそらく数週間で1.10にアップグレード)。それはどのように移植性とパフォーマンスを変えるでしょうか?私の意図は、d3.jsの可視化のためにdjango-rest-frameworkを介してこの情報を提供できることです。これはそれをより容易にするだろうか? – Escher

+0

別のポイント:私はCSVを保存するとしましょう: '1,3,2,5,4'。各整数がどのイメージを参照しているかをどのように知ることができますか? 'Image'は' ordering =( 'id'、) 'でメタクラスを必要としますか? – Escher

+0

各イメージには、このArrayFieldまたはカンマフィールドに入る必要がある主キーがあります – e4c5

関連する問題