Единственная потенциальная проблема, которую я ожидаю, состоит в том, что, если кто-то уже подключился и слушает поток, прежде чем администратор изменит его. Должен ли этот человек услышать новый поток или продолжать слышать поток, который он слушал?
Кроме того, как вы описали это, я мог видеть, как это работает. Вы можете создать URL / представление, которое всегда возвращает текущий поток, например /stream/current/
. Представление для этого URL всегда будет иметь самую последнюю 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)