У меня есть класс Set
с отношением "многие ко многим" к Item
.У меня есть много «установленных» объектов, все из которых содержат много «предметов».
Однако класс Item
был разделен на подклассы для создания Article
, Podcast
, Video
и Episode
.По сути, все в базе данных изначально было Предметом.Если my_set
является экземпляром Set
, содержащим Items
- как мне создать Queryset, который возвращает эти объекты в форме их подкласса?Т.е. вместо того, чтобы получать Queryset, полный экземпляров Item, я получаю Queryset с Article
, Episode
, Video
, Podcast
экземплярами.
Как бы получить `my_set.objects.all (). as_subclass () 'для работы?
class Item(models.Model, AdminVideoMixin):
base_attributes = 'foo'
def as_episode(self):
return Episode.objects.get(slug=self.slug)
class Video(Item):
class specific fields
class Article(Item):
class specific fields
class Podcast(Item):
class specific fields
class Episode(Item):
class specific fields
class Set(Item):
front_page = models.BooleanField(max_length=300, blank=False, default=False, null=False)
items = models.ManyToManyField(Item, related_name='in_sets', through='SetMeta', max_length=5000,)
def get_absolute_url(self):
return reverse('foo')
def ordered(self):
return self.items.all().order_by('-itemOrder__order')
def episodes(self):
episode_list = []
for each_item in self.items.all():
episode_list.append(each_item.as_episode())
return episode_list
def __str__(self):
return self.title
Как вы можете видеть, я попробовал два метода - написать метод модели для Item (), который возвращает себя как Episode - но это работало только дляотдельные экземпляры, а не Queryset.Поэтому я написал метод для Set, который может выполнять этот метод для всех элементов внутри себя, но он не производит Queryset, просто список, и он кажется грязным?