我一直在研究用于调度系统的Django应用程序(使用AJAX dhtmlScheduler库),我需要对事件类型进行颜色编码。作为每个事件的一部分,客户端希望我返回一个#00F162
字符串,指示事件的颜色。然后由客户端解析并由Javascript显示。
造型指南如下所述: http://docs.dhtmlx.com/doku.php?id=dhtmlxscheduler:custom_styling
第一个选项是在数据库中存储十六进制值,可能在event_type
数据库中。第二个选项是将此逻辑放在我的应用程序中,并根据所选的班次进行计算。
将条目存储在event_type
数据库中似乎很奇怪,因为我觉得我将外观与模型混合在一起并且颜色不会改变。第二个选项意味着我正在对应用程序中的值进行硬编码。
哪种方法最好?
答案 0 :(得分: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"
答案 1 :(得分:0)
有几种方法可以做到这一点。
如果event_type的颜色需要可编辑,我会将其作为varchar存储在数据库中。
如果颜色由您决定,那么我可能会对event_type的__unicode__
进行重击并使用CSS来定位该类。如果需要添加新的event_type,这会为您提供少量维护,但它会让您分离关注点。