Given that I have a django model that has a ForeignKey that is linked to 
itself.

    class DjangoModel():
        
        [...]

        successor = models.ForeignKey('self', null=True)

I was able to write a custom django database function like this:

    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 I can do this:

    queryset = DjangoModel.objects.all()
    queryset = queryset.annotate(**{'is_latest': IsNull('successor')})

and if use `queryset.values()` .. I get

    [{'pk': 1, is_latest': True}, {'pk': 2, 'is_latest': False}, ]

where `is_latest == True` when `successor` field is NULL for an object.

Now I want to do something similar, but have no idea where to start!

The bundled `django.contrib.auth.models.User` has a ManyToMany relations to 
`django.contrib.auth.models.Group` model

For my project, there are multiple user group types, e.g customer / 
marketing / finance etc

What I want to do.. is annotate a `User` queryset with `is_FOO` field where 
`FOO` is a group name. e.g `is_customer` or `is_marketing`

So if I use `.values()` on a queryset, I should get something like this:

    [{'pk': 1, 'is_customer': True, 'is_marketing': False }, {'pk': 1, 
'is_customer': True, 'is_marketing': True }]

The group name could be hardcoded, e.g

    queryset.annotate(**{'is_customer': IsGroupMember('customer')}) 

I just need help with the `IsGroupMember` database function!

Is that even possible? Any hints or tips to get me started?

Any help will be genuinely appreciated.  Many Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/5d3fe90a-a4ca-4156-a786-b0a957a48668%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to