django admin - 选择一个模型发布到网站

时间:2010-04-27 01:33:26

标签: django admin publish

嘿,我正在制作一个弹出广播播放器,附带一个带django的shoutbox,我无法获得我想要的管理功能。

我有两种模式:

1)一个Stream(代表管理员可以在首页上播放的某个无线电流 - 即有多个已保存的流,但一次只有一个正在首页播放,由管理员决定)

2)一个Shout(一个已经进入shoutbox的呼叫,并且与某个流相关联,即每个流都有多个呼叫,由该站点的用户输入。)

我希望管理员能够登录到后端,创建多个流,但只能选择一个在任何时候发布。 Presumabley每个流应该有一个属性(即is_published),我应该创建一个管理操作来执行每个流的检查,并只发布正确的一个?这是正确的方法,还是我错过了什么

1 个答案:

答案 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)