Add rooms model, factories, dummy_data generation, graphql node

This commit is contained in:
Pawel Kowalski 2018-08-23 13:22:13 +02:00
parent 64dec5e3ee
commit 5656b15135
8 changed files with 73 additions and 33 deletions

View File

@ -1,13 +1,13 @@
import graphene
from django.conf import settings
from graphene_django.debug import DjangoDebug
from api import graphene_wagtail
from book.schema import BookQuery
from objectives.schema import ObjectivesQuery
from rooms.schema import RoomsQuery
class Query(ObjectivesQuery, BookQuery, graphene.ObjectType):
class Query(RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectType):
# This class will inherit from multiple Queries
if settings.DEBUG:

View File

@ -6,28 +6,31 @@ from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.management import BaseCommand
from rooms.factories import RoomFactory
from rooms.models import Room
from user.factories import UserGroupFactory
from user.models import UserGroup
# room_data = [{
# {
# 'title': 'Ein historisches Festival',
# 'type': 'red',
# 'group': 'Klasse 3b - 2018/2019'
# # 'entries': [1, 1, 1, 1, 1, 1]
# },
# {
# 'title': 'Erfahrungen Lehrbeginn',
# 'type': 'green',
# 'group': 'Klasse 3b - 2018/2019'
# # 'entries': [1]
# },
# {
# 'title': 'Interview «Mein neues Umfeld»',
# 'type': 'brown',
# 'group': 'Hans Muster und 12 weitere Personen'
# # 'entries': [1, 1, 1, 1, 1, 1]
# }
# }]
data = [
{
'title': 'Ein historisches Festival',
'appearance': 'red',
# 'group': 'Klasse 3b - 2018/2019'
# 'entries': [1, 1, 1, 1, 1, 1]
},
{
'title': 'Erfahrungen Lehrbeginn',
'appearance': 'green',
# 'group': 'Klasse 3b - 2018/2019'
# 'entries': [1]
},
{
'title': 'Interview «Mein neues Umfeld»',
'appearance': 'brown',
# 'group': 'Hans Muster und 12 weitere Personen'
# 'entries': [1, 1, 1, 1, 1, 1]
}
]
class Command(BaseCommand):
@ -57,9 +60,15 @@ class Command(BaseCommand):
# is_superuser=True
# )
Room.objects.all().delete()
UserGroup.objects.all().delete()
for i in range(0, 6):
UserGroupFactory(users=(random.choices(get_user_model().objects.all(), k=3)))
for room_idx, room_data in enumerate(data):
RoomFactory.create(**room_data)
# for book_idx, book_data in enumerate(data):
# book = BookFactory.create(parent=site.root_page, **self.filter_data(book_data, 'topics'))
#

View File

@ -15,7 +15,7 @@ class ObjectiveGroup(models.Model):
# a user can define her own objectives, hence this optional param
user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE)
def __unicode__(self):
def __str__(self):
return 'ObjectiveGroup {}-{}-{}'.format(self.id, self.module, self.title)
@ -27,7 +27,7 @@ class Objective(models.Model):
text = models.CharField('text', blank=True, null=False, max_length=255)
group = models.ForeignKey(ObjectiveGroup, blank=False, null=False, on_delete=models.CASCADE)
def __unicode__(self):
def __str__(self):
return 'Objective {}-{}'.format(self.id, self.text)
@ -40,5 +40,5 @@ class ObjectiveProgressStatus(models.Model):
objective = models.ForeignKey(Objective, blank=False, null=False, on_delete=models.CASCADE)
user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE)
def __unicode__(self):
def __str__(self):
return 'Lernzielstatus {}-{}'.format(self.objective, self.done)

View File

@ -0,0 +1,9 @@
from django.contrib import admin
from rooms.models import Room
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'user_group', 'appearance')
list_filter = ('user_group', 'appearance',)

View File

@ -4,7 +4,7 @@ import factory
from core.factories import fake
from rooms.models import Room
from user.factories import UserGroupFactory
from user.models import UserGroup
class RoomFactory(factory.django.DjangoModelFactory):
@ -12,5 +12,5 @@ class RoomFactory(factory.django.DjangoModelFactory):
model = Room
title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8)))
user_group = factory.SubFactory(UserGroupFactory)
user_group = factory.Iterator(UserGroup.objects.all())
appearance = factory.LazyAttribute(lambda x: random.choice(['red', 'green', 'brown']))

View File

@ -1,17 +1,16 @@
from django.db import models
from django_extensions.db.models import TitleDescriptionModel
from django_extensions.db.models import TitleDescriptionModel, TitleSlugDescriptionModel
from user.models import UserGroup
class Room(models.Model):
class Room(TitleSlugDescriptionModel):
class Meta:
verbose_name = 'Raum'
verbose_name_plural = 'Räume'
title = models.CharField(blank=True, null=False, max_length=255)
user_group = models.ForeignKey(UserGroup, blank=False, null=False, on_delete=models.CASCADE)
appearance = models.CharField(blank=True, null=False, max_length=255)
def __unicode__(self):
def __str__(self):
return 'Room {}-{}-{}'.format(self.id, self.title, self.user_group)

View File

@ -0,0 +1,23 @@
import graphene
from graphene import relay
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from rooms.models import Room
class RoomNode(DjangoObjectType):
pk = graphene.Int()
class Meta:
model = Room
filter_fields = ['slug', 'user_group', 'appearance']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
class RoomsQuery(object):
room = relay.Node.Field(RoomNode)
rooms = DjangoFilterConnectionField(RoomNode)

View File

@ -14,5 +14,5 @@ class UserGroup(models.Model):
is_deleted = models.BooleanField(blank=False, null=False, default=False)
users = models.ManyToManyField(get_user_model())
def __unicode__(self):
return 'ObjectiveGroup {}-{}-{}'.format(self.id, self.module, self.title)
def __str__(self):
return 'UserGroup {}-{}-{}'.format(self.id, self.name, self.year)