2014-05-13 27 views
0

假设我们有一个视图ItemAdmin和一个表格ItemAdminForm。在这个管理页面上,我希望能够点击一个按钮来通知已经注册的所有用户,以便知道何时可以下载项目。我对这个模型如下:用Django表单覆盖POST数据的正确方法是什么?

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. 将这些用户更新为已收到通知。

所以在保存方法的形式,我做(1)和(2)。对于(3)我使用:

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

问题是,当页面重新加载,所有的用户都仍然标记为未收到通知。所以我不知道这只是没有生效,或者它可能正在生效,但是由于这些框未被手动检查,它正在覆盖我正在尝试更新的更改。

所以问题是,我如何覆盖窗体的输入,使更新生效?这是否属于除保存方法之外的其他地方?这是否需要使用post_save?任何想法都会有帮助。

回答

0

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

相关问题