首页 > 解决方案 > Django 1.11表单一次执行多个数据提交

问题描述

我有一个表格叫shift

我在这里forms.py

class ShiftForm(forms.ModelForm):

    class Meta:
        model = Shift
        fields = '__all__'

为我createview上课shift

我在这里views.py

class ShiftCreateView(CreateView):
    fields = ('start', 'end', 'off_start', 'off_end', 'shift', 'employee')
    model = models.Shift

我已经创建了表单模板,就像这样。

在此处输入图像描述

它的工作和数据已提交到我的数据库,想象我的数据库表是这样的:

#table shift
+---------------+---------------+---------------+---------------+------------+------------+-------------+
| start         | end           | off_start     | off_end       | time       | user_id    | shift_id    |
+---------------+---------------+---------------+---------------+------------+------------+-------------+
| 2018-01-01    | 2018-01-05    | 2018-01-06    | 2018-01-07    | 07:00      | 1          | 1           |
| ....          | ....          | ....          | ....          | ....       | ....       | ...         |
+---------------+---------------+---------------+---------------+------------+------------+-------------+

我的问题是如何使它以一种形式多重化?...

像这样的例子:

在此处输入图像描述

所以我的数据库表在单次提交中看起来像这样。

#table shift
+---------------+---------------+---------------+---------------+------------+------------+-------------+
| start         | end           | off_start     | off_end       | time       | user_id    | shift_id    |
+---------------+---------------+---------------+---------------+------------+------------+-------------+
| 2018-01-01    | 2018-01-05    | 2018-01-06    | 2018-01-07    | 07:00      | 1          | 1           |
| 2018-01-01    | 2018-01-05    | 2018-01-06    | 2018-01-07    | 07:00      | 1          | 2           |
| 2018-01-01    | 2018-01-05    | 2018-01-06    | 2018-01-07    | 07:00      | 1          | 3           |
| 2018-01-01    | 2018-01-05    | 2018-01-06    | 2018-01-07    | 07:00      | 1          | 4           |
| ....          | ....          | ....          | ....          | ....       | ....       | ...         |
+---------------+---------------+---------------+---------------+------------+------------+-------------+

在我上面的示例中,它在一次执行中提交了 4 次。

谢谢你!

标签: pythondjango

解决方案


在您的前端,将 onclick 属性添加到您的保存按钮并调用一个函数以将您的数据排列在 JSON 中,以便它们如下所示:

{
  "employee": "xyz" ,
  "weeks_schedule" :[
    {"data_week": "value_1", "data_off_week": "value_2", "shift": "value_3"},
    {"data_week": "value_4", "data_off_week": "value_5", "shift": "value_6"},
                    .
                    .
                    .
  ]
}

当然,在函数的最后,在整理好这个 JSON 中的数据后,将其发布到正确的 URL。

在您看来,您应该通过添加编写良好的 post 方法以不同方式处理此 JSON:

class ShiftCreateView(CreateView):

    def post(self, request, *args, **kwargs):
        json_data = json.loads(request.body.decode('utf-8'))
        employee = json_data["employee"]
        for week in json_data["weeks_schedule"]:
            # Code for saving in the database here
        return _(some_http_response)

如果您想在没有 json 的情况下执行此过程,只需提交您的表单,而不是以下行:

 json_data = json.loads(request.body.decode('utf-8'))

 form = request.POST

记得像在 json 中一样手动清理、验证和保存表单中的数据,所以如果你运行print(request.POST)你会注意到你的数据看起来像:

<QueryDict: {'employee': 'xyz', 'off_week': 'xyz_2' ......}>

当然,您的 QueryDict 看起来会有所不同,但如果您知道它的外观,您应该能够处理它。


推荐阅读