自分自身にリンクされているForeignKeyを持つdjangoモデルがあるとすれば、グループ名でdjangoユーザのクエリーセットに注釈を付ける
from django.db.models import BooleanField
from django.db.models import Func
class IsNull(Func):
"""
See docs: https://docs.djangoproject.com/en/1.8/ref/models/database-functions/
"""
template = '%(expressions)s IS NULL'
def __init__(self, *args, **kwargs):
kwargs['output_field'] = BooleanField()
super(IsNull, self).__init__(*args, **kwargs)
は、だから私はこれを行うことができます:
queryset = DjangoModel.objects.all()
queryset = queryset.annotate(**{'is_latest': IsNull('successor')})
と使用queryset.values()
..私は取得する場合
class DjangoModel():
[...]
successor = models.ForeignKey('self', null=True)
私はこのようなカスタムDjangoのデータベース関数を記述することができました
[{'pk': 1, is_latest': True}, {'pk': 2, 'is_latest': False}, ]
wher e is_latest == True
successor
フィールドがオブジェクトの場合はNULLです。
今、私は似たようなことをしたいと思っていますが、どこから始めたらいいのですか?
バンドルdjango.contrib.auth.models.User
は私のプロジェクトのためにモデル
に多対多の関係を持っている、複数のユーザーグループタイプがあり、例えば顧客/マーケティング/金融など
私が何をしたいのか..注釈を付けていますUser
クエリーセットis_FOO
フィールドここで、FOO
はグループ名です。私は、クエリセットに.values()
を使用している場合などis_customer
またはis_marketing
だから、私はこのような何かを得る必要があります。
[{'pk': 1, 'is_customer': True, 'is_marketing': False }, {'pk': 1, 'is_customer': True, 'is_marketing': True }]
グループ名はハードコーディングすることができ、例えば
queryset.annotate(**{'is_customer': IsGroupMember('customer')})
を私は助けを必要とIsGroupMember
データベース機能を使用してください。
これは可能ですか?私を始めるためのヒントやヒント
本当にありがとうございます。多くのおかげで