from django.db import models from polymorphic.models import PolymorphicModel class FeatureSet(models.Model): pass class Feature(PolymorphicModel): featureset = models.OneToOneField(FeatureSet, models.CASCADE) comment = models.CharField(max_length=128) @property def name(self): raise NotImplementedError("%s does not implement name" % self.__class__) def icon(self): return "" class TimeFeature(Feature): time = models.TimeField() class TimeRangeFeature(Feature): time_from = models.TimeField() time_to = models.TimeField() class IncludedStatus(models.IntegerChoices): UNAVAILABLE = 0 AVAILABLE = 1 INCLUDED = 2 class IncludedFeature(Feature): status = models.IntegerField(choices=IncludedStatus.choices) class BedsFeature(Feature): single = models.IntegerField() double = models.IntegerField() queen = models.IntegerField() king = models.IntegerField() couch = models.IntegerField() class AvailableFeature(Feature): status = models.BooleanField() class CountFeature(Feature): count = models.IntegerField() class InRoomStatus(models.IntegerChoices): UNAVAILABLE = 0 COMMON = 1 ROOM = 2 class InRoomFeature(Feature): status = models.IntegerField(choices=InRoomStatus.choices)