監査に Django Simple-History を使用する単純な Django データ モデルを作成しました。
from django.db import models
from simple_history.models import HistoricalRecords
class AuditedModel(models.Model):
history = HistoricalRecords(inherit=True)
history_date
DRY のために、Simple-History の&history_user
属性を追加する代わりに& 属性を活用しようとしてcreated_at
いcreated_by
ます。これらの属性の履歴へのアクセスを簡素化するために、次のようにいくつかのプロパティを追加しました。
@property
def created_date(self):
return self.history.earliest().history_date
@property
def created_by(self):
return self.history.earliest().history_user
インスタンスで作業している場合、これは正常に機能します。history_date
現在、またはでクエリセットをフィルタリングしようとすると、問題が発生していますhistory_user
。たとえば、次のようにして、過去 24 時間に作成されたオブジェクトをフィルター処理できます。
queryset = AuditedModel.objects.all()
queryset.filter(
uuid__in=AuditedModel.history.annotate(
created_date=Min('history_date'),
).filter(
created_date__gte=timezone.now() - relativedelta(days=1)
).values_list(
'uuid', flat=True
)
)
AuditedModel
しかし、複数の属性でフィルター処理する方法がわかりません。最終的に、特定のユーザーによって作成された新しいインスタンスを含むクエリセットを取得したいと考えています。
何かのようなもの:
queryset.filter(
uuid__in=AuditedModel.history.annotate(
created_date=Min('history_date'),
).filter(
created_date__gte=timezone.now() - relativedelta(days=1)
).values_list(
'uuid', flat=True
),
history__history_user=request.user
)
これはhistory
解決できないため機能しませんが、私が取得しようとしていることを示しています (願っています)。
シンプルヒストリーをこのように使用した人はいますか? 彼らは、これを解決するために正しい方向に私を押してくれるでしょうか? この時点で、代替手段が見えないのでmycreated_by
とproperties を適切なフィールドに置き換えることについて議論していますが、それは間違っていると感じています。created_at