2016-04-18 15 views
0

jQuery UI Sortableを使用して、アップロードした画像を並べ替えることができます。&ドロップします。どのように動作するのですか:Djangoデータベースに保存されたオブジェクトの並び順を変更するには

写真をアップロードすると、新しくアップロードされたすべての画像が左側の列に表示される別のページに転送されます。ユーザーは、写真を左の列から右の列に望む順序でドロップすることができます。私はソートされた配列を取得するためにjQuery Serializeを使用しています。

私の質問は、画像を並べ替え、シリアル化によって返されたものと同じオーダーを保存するためにデータベースを更新するにはどうすればよいですか?

ありがとうございました

答えて

3

データベースの順序を変更しないで、データベースで結果を並べ替えるようにしてください。あなたがする必要があるのは、データベースに並べ替えるものを与えることだけです。

order整数フィールドをモデルに追加し、ユーザーが画像の注文を作成したときにこれらの値を更新します。これは簡単な番号付け操作です。次に、表示するイメージを照会するときに、そのフィールドにソートします。

イメージがユーザー間で共有される場合は、これを別のモデルにする必要があります。

class ImageOrder(Model): 
    """Keeps track ordering of images for a given user""" 
    order = IntField() 
    user = ForeignKey(User) 
    image = ForeignKey(Image) 

今、あなたは、特定のユーザーとの関係で画像をフィルタリングし、orderフィールドでそれらを注文することができます:

ImageOrder.objects.filter(user=user).order_by('order').select_related('image') 

その後、.imageを使用するために添付した画像にユーザーをマップする1各ImageOrderインスタンスのフィールド。

+0

ありがとうございました。物事は、多くの異なるページでユーザー画像を(それによって定義された順序で)表示することに大いに依存しているアプリです。 「オーダー」に基づいてフィルタリングを行うアプローチではなく、データベースに非効率的にアクセスする必要があるたびに画像をソート/フィルタリングするようにしていますか?効率を上げるために、dbを操作する他の簡単な方法がない場合、私はこのアプローチをしても構いません。 – Rooz

+1

@Rooz:データベースは、複数のテーブルを操作するために高度に最適化されています。いいえ、これは非効率的ではありません。リレーショナルデータベースシステムは、すべてこのように物事を結合することです。 –

関連する問題