2017-03-24 1 views
0

私はオンラインショップの良いモデルを作りたいと思います。モデルには多数の画像が含まれている必要があります。私は良いのためのすべての画像を取得するために理解するようイメージのdjangoリスト

1)

class Good(models.Model): 
    ... 

class Img(models.Model): 
    img = models.ImageField(... 
    good = models.ForeignKey("Good", ... 

2)

class Good(models.Model): 
    img = models.ForeignKey('ChainImg', ... 

class ChainImg(models.Model): 
    img = models.ImageField(... 
    anotherimg = models.ForeignKey("ChainImg", ... 

を1の場合)私はそれを行うには、2つのアプローチを持っています"Img"テーブル内の行は商品のIDに対してフィルタリングされ、100個の商品がある場合、テーブルは100種類のIDに対して100回フィルタリングされます。

2の場合)平均画像に10枚の画像がチェーンされている場合、「Img」テーブルが10回クエリされ、IDで10行が返されます。したがって、100品目の "Img"表は約1000回のIDで照会されますが、フィルターは必要ありません。 ChainImgは、それ自身を指し示し、問題を引き起こす可能性があります。しかしそれは避けることができます。

どのアプローチが良いでしょうか?もっと早く?もっと効率的?正しい?

答えて

1

この状況では、最初のアプローチが正しい方法です。

最初のケースでは、単純なループfor image in good.images: do somethingステートメントを使用できます。

2番目のケースでは、同じテーブルに対して複数のルックアップを実行する必要があります。不要な複雑さであるため、同じテーブルで複数のJOINを実行するループが必要になります。

関連する問題