gpt4 book ai didi

mysql - Django - 如何对主题内的视频序列进行排序?

转载 作者:行者123 更新时间:2023-11-30 00:30:22 25 4
gpt4 key购买 nike

我正在 django 中构建一个视频库。到目前为止,我有几门类(class),每个类(class)分为一个主题,每个主题都有 10-20 个视频。

我想为主题内的每个视频分组提供排序。因此,当用户学习类(class)时,视频会有特定的顺序。

我的挑战是如何在我的数据库后端(mysql)中存储视频的顺序,以及如何查找和检索顺序?我还希望有(上一个)和(下一个)链接,以便用户可以轻松地单击序列。

起初我想我的视频模型上会有一个“sequence”int 字段,然后查找它并简单地找到下一个或上一个。但是,如果输入序列时跳过了某个数字怎么办?我也想在每个序列中强制编号。

这是到目前为止的一些代码:

class Video(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=500, blank=True)
topic = models.ForeignKey('VideoTopic')
sequence = models.IntegerField(default=1, null=True, help_text="(Sequence within the topic)")

class VideoTopic(models.Model):
name = models.CharField(max_length=200, blank=True)
description = models.TextField(blank=True)
course = models.ForeignKey('course.Course')

虽然这在一定程度上满足了排序的基本要求,但我不知道如何强制执行排序,而且我也很难查找上一个/下一个视频。

我想我需要将序列存储在一个单独的表中,但我不太清楚应该如何完成。像这样的东西:

class VideoSequence(models.Model)
topic = models.ForeignKey('VideoTopic')
sequence = models.IntegerField()
video = models.ForeignKey('Video')

如果我使用上面的单独表格,我该如何在 django 中查找序列?

最佳答案

简单答案:

https://github.com/iambrandontaylor/django-admin-sortable

不太简单的答案:

执行此操作的标准方法是您已有的方法,即使用数字排序字段。如果您想强制执行连续的顺序索引,则可以在每次更改序列时使用信号来“重新索引”序列。

from django.db.models.signals import post_save

def update_sequence(sender, instance=False, created, **kwargs):
qs = self.topic.video_set.all().order_by('sequence')
counter = 1
for video in qs:
video.sequence = counter
video.save()
counter += 1

post_save.connect(update_sequence, sender=Video)

然后获取序列中的下一个/上一个项目:

模型.py:

class Video(models.Model):
....
class Meta:
order_by = 'sequence'

def get_next(self):
return self.__class__.filter(sequence__gt=self.sequence)[0]

def get_prev(self):
return self.__class__.filter(sequence__lt=self.sequence)[-1]
<小时/>

关于mysql - Django - 如何对主题内的视频序列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22562788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com