如何在Django(没有任何DB表的派生模型)中创建排序DB视图

如何在Django(没有任何DB表的派生模型)中创建排序DB视图,django,python-3.x,model,Django,Python 3.x,Model,这是我在models.py中的故事类: class Story(models.Model): def __str__(self): return self.content if len(self.content) <= 8 else self.content[:8]+"..." master = models.ForeignKey(User) story_book = models.ForeignKey(Story_book) content

这是我在models.py中的
故事
类:

class Story(models.Model):
    def __str__(self):
        return self.content if len(self.content) <= 8 else self.content[:8]+"..."
    master = models.ForeignKey(User)
    story_book = models.ForeignKey(Story_book)
    content = models.CharField(max_length=5000)
    create_date = models.DateTimeField('date created')
    STORY_TYPES = (
        ('bf', 'before commited'),
        ('cm', 'commited'),
        ('dl', 'deleted'),
    )
    Story_type = models.CharField(max_length=2, choices=STORY_TYPES, default='bf')
    handled_date = models.DateTimeField('date handled', null=True)
课堂故事(models.Model):
定义(自我):

如果len(self.content)您需要使用自定义管理器执行以下操作,则返回self.content:

class Story(models.Model):
    """ Base model, will be represented in database """
    master = models.ForeignKey(User)
    [...]
    Story_type = models.CharField(max_length=2, choices=STORY_TYPES, default='bf')


class StoryManager(models.Manager):
    """ Manager used for proxies, to automatically filter by type """
    def __init__(self, story_type=None, *args, **kwargs):
        super(StoryManager, self).__init__(*args, **kwargs)
        self.story_type = story_type

   def get_queryset(self):
        return super(StoryManager, self).get_queryset().filter(Story_type=self.story_type)


class BeforeCommitedStory(Story):
    """ Each proxy take the custom manager with the revelant type """
    objects = StoryManager('bf')
    class Meta:
        proxy = True


class CommitedStory(Story):
    objects = StoryManager('cm')
    class Meta:
        proxy = True


class DeletedStory(Story):
    objects = StoryManager('dl')
    class Meta:
        proxy = True
您应获得以下行为:

Story.objects.create(..., type="bf") # ID 1
Story.objects.create(..., type="bf")  
Story.objects.create(..., type="cm")
Story.objects.create(..., type="dl")

Story.objects.all() # [ID 1, ID 2, ID 3, ID 4]
BeforeCommitedStory.objects.all() # [ID 1, ID 2]
CommitedStory.objects.all() # [ID 3]
DeletedStory.objects.all() # [ID 4]