在Django表单中覆盖POST数据的正确方法是什么?

时间:2014-05-13 13:31:30

标签: python django forms override updating

我们假设我们有一个视图 ItemAdmin 和一个表单 ItemAdminForm 。在此管理页面上,我希望能够单击按钮以通知已注册的所有用户,以了解项目何时可供下载。我的模型如下:

class PreregisteredUser(models.Model):
    item = models.ForeignKey(Item, related_name='preregistered_users')
    user = models.ForeignKey(User, related_name='preregistrations')
    date_registered = models.DateTimeField(auto_now_add=True)
    notified = models.BooleanField(default=False)

    class Meta:
        unique_together = 'item', 'user'

在提交时,我希望逻辑类似于以下内容:

  1. 如果单击了notify_users,请查找尚未收到通知的所有预先注册的用户。
  2. 通知这些用户。
  3. 在收到通知后更新这些用户。
  4. 因此,在表单的 save 方法中,我做(1)和(2)。对于(3)我使用:

    PreregisteredUser.objects.filter(item=item).update(notified=True)
    

    问题是,当页面重新加载时,所有用户仍被标记为未被通知。所以我不知道这是不是生效了,或者它是否生效,但由于盒子没有手动检查,它会覆盖我试图用它做的改变。更新

    所以问题是,如何覆盖表单的输入以使更新生效?这是否属于 save 方法旁边的其他位置?这是否需要使用 post_save ?任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我认为你最好的选择是使用pre_save()并在那里添加你的逻辑。这样,当您的页面加载时,它会加载您操作的数据。