2013-02-21 33 views
1

我一直在調度系統的Django應用程序(使用AJAX dhtmlScheduler庫),我需要顏色代碼的事件類型。作爲每個事件的一部分,客戶期望我返回一個指示事件顏色的字符串#00F162。然後由客戶端解析並由Javascript顯示。將顏色信息存儲在Web應用程序中的位置?

定型導向描述如下: http://docs.dhtmlx.com/doku.php?id=dhtmlxscheduler:custom_styling

第一個選項是存儲在DB中的十六進制值,也許在event_type數據庫。第二種選擇是將邏輯放在我的應用程序中,並根據所選的班次計算它。

event_type數據庫中存儲條目似乎很奇怪,因爲我覺得我在模型中混合了外觀,顏色不會改變。第二個選項意味着我對應用程序中的值進行了硬編碼。

這將是最好的方法?

+0

有多少類型的事件,你希望有? – Matt 2013-02-21 18:51:57

+0

還有12條左右。 – 2013-02-21 18:52:19

回答

2

在這種特殊情況下,我會將十六進制顏色代碼存儲在模型中的字段中。

本質:

class Event(models.Model): 
    ALERT = "alert" 
    WARNING = "warning" 
    ERROR = "error" 
    EVENT_TYPES = (
     (ALERT, "Alert"), 
     (WARNING, "Warning"), 
     (ERROR, "Error"), 
    ) 

    YELLOW = "FF6A00" 
    ORANGE = "FFE800" 
    RED = "FF0000" 
    COLOURS = (
     (YELLOW, "Yellow"), 
     (ORANGE, "Orange"), 
     (RED, "Red"), 
    ) 

    event_type = models.CharField(max_length=16, choices=EVENT_TYPES, default=ALERT) 
    event_colour = models.CharField(max_length=6, choices=COLOURS, default=YELLOW) 

補充說明,對於「常量」的原因是爲了讓使用該模型乾淨,簡單的代碼。

# example 1 
error_events = Event.objects.filter(event_type=Event.ERROR) 

# example 2 
if my_event.event_type == Event.Error: 
    # this is an error event 
    pass 

而且,這裏是你能做到這一點,而不色域模型上的一種方法:

class Event(models.Model): 
    ALERT = "alert" 
    WARNING = "warning" 
    ERROR = "error" 
    EVENT_TYPES = (
     (ALERT, "Alert"), 
     (WARNING, "Warning"), 
     (ERROR, "Error"), 
    ) 

    # map events to colours 
    COLOUR = { 
     ALERT: "FF6A00", 
     WARNING: "FFE800", 
     ERROR: "FF0000", 
    } 

    event_type = models.CharField(max_length=16, choices=EVENT_TYPES, default=ALERT) 

    @property 
    def colour(self): 
     """ 
     Return the hexadecimal colour of this event 
     """ 
     self.COLOUR[event_type] 

# now this would return True 
my_error_event.colour == "FF0000" 
+0

太棒了。第二種方法正是我所需要的。我可以在影響數據庫的過程中保持一切接近源代碼。 – 2013-02-21 20:02:08

0

有幾種方法可以做到這一點。

如果event_type的顏色需要可編輯,我會將它作爲varchar存儲在數據庫中。

如果顏色取決於你,那麼我可能會猛擊event_type的__unicode__並使用CSS來定位該類。如果需要添加新的event_type,它會爲您提供少量的維護,但它可以讓您分離關注點。

相關問題