2013-03-15 206 views
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 

我然後傳送字典的方法我的模型內創建或更新有關的事件。

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

超類基本驗證請求的值,並將其保存到模型:

e.update(**parameters) 

一旦出現,如下更新方法調用父類。現在,我需要在我的模型中添加另一列,並需要更新每種方法。

我對Django相當陌生,但這看起來並不像最乾淨的方法。

有沒有更優雅的方法來處理這個問題? 我應該讓字典通過每種方法,而不是打擾拆包它?

+0

我覺得這將是更適合於[代碼審查(HTTP://codereview.stackexchange .com /),因爲你在談論工作代碼和風格。 – 2013-03-15 13:29:31

回答

2

聽起來你應該使用ModelForms:

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

一般來講,只要你與請求數據處理(POST或GET或其他),你應該考慮使用表單驗證。一個常見的誤解是,Django表單僅用於顯示實際的HTML表單,但實際情況是它是一種數據驗證API,可以在許多情況下使用。 ModelForm更進一步,將Django表單綁定到模型類,並負責創建或更新模型(當您在表單上調用save()時)。

然後,一旦你瞭解ModelForms,考慮尋找到Django的通用視圖創建和更新型號:

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