2016-05-15 9 views
2

良い日、私には問題があります:私はいくつかのフィールドを持つモデルを持っています。Djangoクエリーセットのカスタムフィルタ

class Gallery(models.Model): 
    image = models.FileField(upload_to='gallery/') 
    status = models.BooleanField() 
    type = models.BooleanField() 

私は、このモデルを石工格子に格納するためにこのモデルを使用しました。このグリッドは固定されており、12のランダムな画像を取得する必要があります。これは簡単です。

gallery = Gallery.objects.all().order_by('id','pk').order_by('?')[: 12]; 

しかし、そのうち5つはTrueタイプで、その他7つはFalseです。このクエリーセットで注文を注文することができれば、私は非常に満足しています。たとえば、Trueは横の絵(h)、False - vertical [v]を意味します。

+1

これが必要な場合はわかりません。しかし、最初に5つのランダムなTrueタイプを取得し、次に7つのランダムなFalseタイプを取得し、これらの2つのクエリ結果を組み合わせるのはどうでしょうか? – alix

答えて

1

2つのクエリを実行できます.1つは水平方向、もう1つは垂直方向ですオブジェクト。

horizontal = Gallery.objects.filter(type=True).order_by('?')[:7] 
vertical = Gallery.objects.filter(type=False).order_by('?')[:5] 

次に、あなたの2つのクエリセットorder_by docsorder_by('?')が遅くなることがありますことを警告すること

gallery = [verical[0]] + horizontal[0:3] + vertical[1:4] + horizontal[3:] + vertical[4:] 

注からリストを構築します。パフォーマンス上の問題が発生した場合は、別の方法を検討してください。例えば、this questionを参照してください。

関連する問題