2010-04-27 76 views
0

嘿,我正在製作一個彈出式廣播播放器與django附加吼吼箱,我無法獲得我想要的管理功能。django管理員 - 選擇一個模型發佈到網站

我有兩個型號:

1)流(其代表一定無線電流的管理員可以發佈到在FrontPage玩 - 即有多個保存流,但只有一個是打在FrontPage一次,由管理員決定)

2)喊(呼喊已被輸入到喊話筒中,並且與某個流相關聯,即每個流都有多個呼叫,由用戶輸入)

我希望管理員能夠登錄到後端,創建多個流,但在在任何時候選擇一個發佈。可預測的每個流應該有一個屬性(即is_published),我應該創建一個管理操作來檢查每個流,並只發布正確的流?這是正確的方式去了解它還是我缺少的東西

回答

1

我預測的唯一潛在的問題是,如果有人已經連接並正在監聽流之前,管理員更改它。該人是否應該聽到新的流或者繼續聽到他們正在聽的流?

除此之外,你描述它的方式,我可以看到它的工作。您可以創建一個始終返回當前流的url/view,如/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) 

因爲你將可能使用你的應用程序的其他地方「設置這個流作爲活動流」,你可以把一個你的流模型的一部分...

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) 
+0

這聽起來就像我想要做的。輝煌!該網站在任何時候都只會有一條直播節目。另外,每個流都會有一堆用戶可以切換到的MP3錄音。我可以添加功能手動切換流。 我希望管理員能夠從管理區域發佈某個要發佈到該網站的流。我說我需要使用管理員操作來實現此目標嗎? – pastylegs 2010-04-27 10:52:06

+0

我仍然對MVC模式和數據庫操作與邏輯的分離感到頭疼。我注意到該模型具有對自身進行操作的功能。這些應該不是視圖而是模型? – pastylegs 2010-04-27 10:58:25

+1

@pasty Django實際上是MVT,與MVC略有不同。這可能有點優惠,但我傾向於厚實的模型,薄的意見。我發現這種方式的代碼重複較少。我相信其他人可以爲瘦身模式和厚意見做出很好的論證。 – 2010-04-27 17:49:29