我有两种模式:
1)一个Stream(代表管理员可以在首页上播放的某个无线电流 - 即有多个已保存的流,但一次只有一个正在首页播放,由管理员决定)
2)一个Shout(一个已经进入shoutbox的呼叫,并且与某个流相关联,即每个流都有多个呼叫,由该站点的用户输入。)
我希望管理员能够登录到后端,创建多个流,但只能选择一个在任何时候发布。 Presumabley每个流应该有一个属性(即is_published),我应该创建一个管理操作来执行每个流的检查,并只发布正确的一个?这是正确的方法,还是我错过了什么
答案 0 :(得分:1)
我预见到的唯一潜在问题是,如果有人已经连接并且在管理员更改之前正在收听流,该怎么办?该人是否应该听到新流或继续听到他们正在听的流?
除此之外,你所描述的方式,我可以看到它的运作。您可以创建一个始终返回当前流的网址/视图,例如/stream/current/
。该网址的视图将始终获得最新的Stream
模型...
def current_stream(request, *args, **kwargs):
# Get first stream marked as published
s = Stream.objects.filter(is_published=True)[1][0]
return do_streaming_stuff(s)
因为您可能会在应用中的其他地方使用“将此流设置为活动流”,所以您可以将其作为Stream模型的一部分...
class Stream(models.Model):
is_published = models.BooleanField()
def set_as_active_stream(self, do_save=True):
enabled_streams = Stream.objects.filter(is_published=True)
for s in enabled_streams:
s.is_published=False
s.save()
if do_save:
self.is_published=True
self.save()
def save(self, *args, **kwargs):
if self.is_published:
# No need to double save, since we're already saving it
self.set_as_active_stream(do_save=False)
super(Stream, self).save(*args, **kwargs)