0

Django アプリケーション内に、リクエストを受け取ってパラメータを解析し、結果を辞書に返す関数があります。

たとえば、次のようなものです。

def parse_event_parameters(request):
    """
    Parse the parameters for a given event
    from a request and return the result
    as a dictionary of strings.
    """
    try:
        request_params = {
            'event_id': id,
            'start_date': request.POST[id + '_start_date'],
            'end_date': request.POST[id + '_end_date'],
            'shift_type': request.POST[id + '_shift_type'],
            'rec_type': request.POST[id + '_rec_type'],
            'event_length': request.POST[id + '_event_length'],
            'event_pid': request.POST[id + '_event_pid'],
        }
    except KeyError, err:
        raise err
    return request_params

次に、この辞書をモデル内のメソッドに渡して、問題のイベントを作成または更新します。

e.update(**parameters)

そこに到達すると、update メソッドは次のようにスーパー クラスを呼び出します。

    super(Event, self).update(event_id, start_date,
           end_date, shift_type, rec_type,
           event_length, event_pid, employee_id)

スーパークラスは基本的にリクエストの値を検証し、モデルに保存します。ここで、モデルに別の列を追加し、各メソッドを更新する必要があります。

私は Django にかなり慣れていませんが、これは最もクリーンなアプローチとは思えません。

これにアプローチするよりエレガントな方法はありますか?各方法で辞書を保持し、開梱する必要はありませんか?

4

1 に答える 1

2

ModelForms を使用する必要があるように聞こえます。

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#modelform

一般に、リクエスト データ (POST や GET など) を扱うときはいつでも、フォームを使用して検証することを検討する必要があります。よくある誤解は、Django フォームは実際の HTML フォームを表示するためだけのものであるというものです。実際には、Django フォームは多くの状況で機能するデータ検証 API であるということです。ModelForm はさらに一歩進んで、Django フォームをモデル クラスにバインドし、(save()フォームを呼び出したときに) モデルの作成または更新を処理します。

次に、ModelForms を理解したら、モデルを作成および更新するための Django の一般的なビューを調べることを検討してください。

https://docs.djangoproject.com/en/1.5/topics/class-based-views/generic-editing/

于 2013-03-15T13:41:10.770 に答える