比方说,用户有视频剪辑和图像,它们都有相应的模型,VideoClipModel 和 ImageModel。
现在我正在添加一项新功能,用户可以在其中组合剪辑和图像来创建“最终”视频。现在我需要的是创建一个模型,我可以在其中存储视频剪辑和图像的序列。任何人都知道如何做到这一点?
例如:用户想要创建具有以下项目序列的最终视频:
Image1 -> VideoClip1 -> Image2 -> VideoClip2 -> VideoClip3 -> Image3 -> Image1
我想做的是创建一个模型,我可以在其中存储所选序列
我想创建我的 VideoFinalModel,其中包含两个 m2m 字段到 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 方式做到这一点?
谢谢!
请您参考如下方法:
您可以拥有一个带有位置字段的模型 VideoComponent 以及指向 VideoClipModel 和 ImageModel 的外键。然后 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:
