python - 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 次。
谢谢你!
解决方案
在您的前端,将 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 看起来会有所不同,但如果您知道它的外观,您应该能够处理它。
推荐阅读
- python - 如何使用模拟进行猴子补丁并设置返回值
- verilog - MIG MCB 意外写入行为
- ios - UITabbarController 隐藏标签栏破坏了安全区域布局
- node.js - 如何将 Twilio 节点与 TypeScript 一起使用?
- php - 未捕获的 ArgumentCountError:函数 wpdb::prepare():update 的参数太少
- c# - NetSuite C# 控制台应用程序 Web 服务令牌身份验证返回“模糊身份验证”
- javascript - 如何在按钮单击时使用 javascript 添加预制 div
- google-sheets - Google表格中查询命令ORDER BY的问题
- pandas - 熊猫:爆炸数组元素和组?
- octobercms - Octobercms 在 media.file.upload 事件中上传后重命名文件