2

我在 Django 表单集中注意到了一些东西:

每个 formset.form 都有一个隐藏字段,其中包含正在编辑的模型的 id。只需更改此 ID 并提交,默认的表单集clean()save()方法不会引起注意。

我认为跟踪原始表单集查询集中的对象并在保存时比较它们不会太复杂。我想知道为什么 Django 还没有这样做?

至于我,我正在检查表单集保存的权限,例如:

if formset.is_valid():
    for fs in formset:
        report = fs.save(commit=False)
        if can_edit(request.user, report):
            report.save()

还有人注意到这个问题吗?我很想知道你是如何解决它的。

4

1 回答 1

0

如果您拥有编辑该其他对象的必要权限,那么 Django 为什么要阻止您这样做呢?HTTP 请求是无状态的,所以当一个 POST 进来时,Django 会检查你是否被允许执行这个请求。

因此,假设您已通过身份验证并有权更改Comment对象。您的表单有一个带有 的评论id=1。您将隐藏字段更改为id=2并提交表单。Django 将检查您的权限并查看您是否可以更改任何Comment实例并应用已发布的更改。

于 2016-05-03T16:56:19.867 回答