1

私はスケジューリング システム (AJAX dhtmlScheduler ライブラリを使用) 用の Django アプリに取り組んでおり、イベントの種類を色分けする必要があります。#00F162クライアントは、各イベントの一部として、イベントの色を示す文字列を返すことを期待しています。これはクライアントによって解析され、Javascript によって表示されます。

スタイリング ガイドは次のとおりです。 http://docs.dhtmlx.com/doku.php?id=dhtmlxscheduler:custom_styling

最初のオプションは、16 進値を DB (おそらくevent_typeデータベース) に格納することです。2 番目のオプションは、このロジックをアプリケーションに配置し、選択したシフトに基づいて計算することです。

event_typeモデルと外観を混同しているように感じ、色が変わらないため、エントリをデータベースに保存するのは奇妙に思えます。2 番目のオプションは、アプリで値をハードコーディングしていることを意味します。

どちらが最善のアプローチでしょうか?

4

2 に答える 2

2

この特定のケースでは、モデル内のフィールドに16進カラーコードを格納します。

本質的に:

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

また、モデルにカラーフィールドなしでそれを行うことができる1つの方法があります:

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"
于 2013-02-21T18:54:59.957 に答える
0

これを行うにはいくつかの方法があります。

event_typeの色を編集可能にする必要がある場合は、varcharとしてデータベースに保存します。

色があなた次第であるなら、私はおそらく__unicode__event_typeのをスラッグ化し、CSSを使用してそのクラスをターゲットにします。これにより、新しいevent_typeを追加する必要がある場合に、少量のメンテナンスが提供されますが、関心の分離が可能になります。

于 2013-02-21T18:53:36.633 に答える