Django 1.11在一次执行中提交多个数据

时间:2018-07-30 08:22:05

标签: python django

我有一个名为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

并且我已经创建了表单模板,

enter image description here

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

#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           |
| ....          | ....          | ....          | ....          | ....       | ....       | ...         |
+---------------+---------------+---------------+---------------+------------+------------+-------------+

我的问题是如何以一种形式将其设置为多个?...

像这样的例子:

enter image description here

因此,在我的数据库表中,单次提交将如下所示。

#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次提交。

谢谢!

1 个答案:

答案 0 :(得分:1)

在前端,将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),您会注意到您的数据看起来像: / p>

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

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