import graphene from graphene import relay from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField from rooms.models import Room, RoomEntry from user.schema import UserGroupNode, UserNode class RoomEntryNode(DjangoObjectType): pk = graphene.Int() author = UserNode() class Meta: model = RoomEntry filter_fields = ['slug'] interfaces = (relay.Node,) def resolve_pk(self, *args, **kwargs): return self.id class RoomType(DjangoObjectType): pk = graphene.Int() user_group = UserGroupNode() room_entries = DjangoFilterConnectionField(RoomEntryNode) class Meta: model = Room filter_fields = ['slug', 'appearance'] interfaces = (relay.Node,) def resolve_pk(self, *args, **kwargs): return self.id class RoomsQuery(object): room = graphene.Field(RoomType, slug=graphene.String(), id=graphene.Int(), appearance=graphene.String()) room_entry = relay.Node.Field(RoomEntryNode) all_rooms = DjangoFilterConnectionField(RoomType) all_room_entries = DjangoFilterConnectionField(RoomEntryNode) def resolve_room(self, info, **kwargs): slug = kwargs.get('slug') id = kwargs.get('id') if id is not None: return Room.objects.get(pk=id) if slug is not None: return Room.objects.get(slug=slug) return None