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)

在那里,更新方法调用一个超类,如下所示:

    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 表单,而实际上它是一个可以在许多情况下工作的数据验证 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 回答