Django:存储多个&动态排序的模型序列

时间:2015-06-17 09:53:21

标签: python django django-models

可以说,用户拥有视频剪辑和图片,两者都带有相应的型号VideoClipModelImageModel

现在我正在添加一项新功能,用户可以将剪辑和图像组合在一起以创建“最终”视频。现在我需要的是创建一个模型,我可以存储视频剪辑和图像的序列。任何人都知道如何做到这一点?

例如:用户想要使用以下项目序列创建最终视频:

Image1 -> VideoClip1 -> Image2 -> VideoClip2 -> VideoClip3 -> Image3 -> Image1

我想要做的是创建一个模型,我可以存储所选的序列

我想创建一个带有两个m2m字段的VideoFinalModel到ImageModel和VideoClipModel以及一个charfield,它将以类似于此的方式存储订单:

image_1, video_1, image_2, video_2, video_3, image_3, image_1

所以模型看起来像:

def VideoFinal(...):
    videos = models.ManyToManyFIeld("VideoClips")
    images = models.ManyToManyFIeld("Images")
    order = models.CharField()

def Images(...):
    """ A bunch of fields here """

def VideoClips(...):
    """ A bunch of different fields here """

现在,这会做我想要的......但是我不相信这是应该怎么做的。

我怎样才能以pythonic的方式做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用包含位置字段的模型VideoComponent以及VideoClipModelImageModel的外键。然后,Video模型会有多个到VideoComponent的字段。

class Video(models.Model):
    components = models.ManyToManyField('VideoComponent')

class VideoComponent(models.Model):
    image = models.ForeignKey('ImageModel')
    video_clip = models.ForeignKey('VideoClipModel ')
    position = models.IntegerField()

    class Meta:
        ordering = ['position']

获取订购的组件:

 video.components.all()

另请查看django-mptt以存储分层数据:

The problem which django-mptt solves.

Project github.