これは、Stackoverflow に似た、共同モデレーションの機能を有効にするアプリケーションに関するものです。
現在の状態
次のような Django ORM クエリがあります。
versions = Version.objects.filter(is_reviewed=False).exclude(moderations__user__pk=request.user.id).order_by('content_type__id', 'object_id', '-number').distinct('content_type', 'object_id')
各コンテンツ オブジェクトは、ユーザーが作成した任意の数のバージョンを持つことができます。ここで行っているのは、他のユーザーからのすべてのレビューされていないバージョンを取得することですが、コンテンツ オブジェクトごとに最新のバージョンのみを取得します。
問題
しかし、別の除外条件を追加したい: コンテンツ オブジェクトに新しいバージョンがある場合is_reviewed=True
、以前のバージョンを返すべきではありません。ただし、レビューされていない新しいものは返却する必要があります。これを行う方法はありますか?
いくつかの例。ここにあるすべてのバージョンが同じコンテンツ オブジェクト用であると想定しています。
例A
- 「最初のバージョン」 - 未レビュー
- 「改良版」 - 未レビュー
- 「さらに改良されたバージョン」 - 未レビュー
これにより、3 行目が返されます。期待どおりに動作します。
例 B
- 「最初のバージョン」 -レビュー
- 「改良版」 - 未レビュー
- 「さらに改良されたバージョン」 - 未レビュー
これにより、3 行目が返されます。期待どおりに動作します。
例 C
- 「最初のバージョン」 - 未レビュー
- 「改良版」 -レビュー
- 「さらに改良されたバージョン」 - 未レビュー
これにより、3 行目が返されます。期待どおりに動作します。
例 D
- 「最初のバージョン」 - 未レビュー
- 「改良版」 - 未レビュー
- 「さらに改良されたバージョン」 -レビュー
これはno rowを返すはずです。これは現時点では機能しません。意図したものではない2行目を返します。
/編集
ここに私のモデルがあります: http://sql.nopaste.dk/p48981