Gegeben, dass ich ein Django-Modell habe, das einen ForeignKey hat, der mit sich selbst verknüpft ist.Django-Benutzeranfragesatz mit Gruppennamen annotieren
class DjangoModel():
[...]
successor = models.ForeignKey('self', null=True)
konnte ich eine benutzerdefinierte django Datenbank Funktion wie folgt schreiben:
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)
So kann ich dies tun:
queryset = DjangoModel.objects.all()
queryset = queryset.annotate(**{'is_latest': IsNull('successor')})
und wenn die Verwendung queryset.values()
.. ich
[{'pk': 1, is_latest': True}, {'pk': 2, 'is_latest': False}, ]
wo e is_latest == True
, wenn das Feld successor
für ein Objekt NULL ist.
Jetzt möchte ich etwas ähnliches tun, aber habe keine Ahnung, wo ich anfangen soll!
Die gebündelte django.contrib.auth.models.User
hat eine ManyToMany Beziehungen zu Modell
Für mein Projekt gibt es mehrere Benutzergruppentypen, zB Kunde/Marketing/Finanzen usw.
Was ich .. tun möchte, ist ein mit Anmerkungen versehen User
queryset mit is_FOO
Feld FOO
ist ein Gruppenname. So zB is_customer
oder is_marketing
wenn ich .values()
auf einem queryset verwenden, sollte ich so etwas wie dieses:
[{'pk': 1, 'is_customer': True, 'is_marketing': False }, {'pk': 1, 'is_customer': True, 'is_marketing': True }]
Der Gruppenname fest einprogrammiert werden könnte, zum Beispiel
queryset.annotate(**{'is_customer': IsGroupMember('customer')})
ich nur Hilfe benötigen mit der IsGroupMember
Datenbankfunktion!
Ist das überhaupt möglich? Irgendwelche Tipps oder Tipps, um mich zu beginnen?
Jede Hilfe wird wirklich geschätzt. Vielen Dank