首页 > 解决方案 > 姜戈。如何实现逻辑以在 django 模型中启动删除时间计数器或倒计时以自动删除对象?

问题描述

大家好,我如何在 django 中实现逻辑以在用户选择删除他的帖子后 2 天后自动删除优惠券。?

我有这个具有正常删除功能的视图。但是如何对此进行更改以使其在 2 或 3 天后从数据库中自动删除,而不是立即删除。?

看法

class DeletePostView(LoginRequiredMixin, UserPassesTestMixin, BSModalDeleteView):
    model = Post
    template_name = 'posts/delete_post.html'
    success_message = 'Deleted'

    def get_success_url(self):
        return reverse_lazy('posts:myhome')

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.user:
            return True
        return False 

如果在基于类的视图中难以实现,请告诉我如何使用 fbv 实现该逻辑。

谢谢

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


您可以创建一个单独的模型来保存用户删除帖子时的时间和 ID。然后使用 cronjob,如果 2 或 3 天过去,您每天检查该模型的每个对象。

例如

class DeletedPostsModel(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    created = models.DateField(auto_now_add=True)

在 cronjob 中,您检查创建的字段是否比当前日期少 x 天。如果是这样,请删除该帖子。cronjob 应该调用处理删除逻辑的自定义命令。在这里阅读

在您的 中DeletePostView,覆盖您创建 DeletedPostsModel 并设置当前帖子的删除方法。


推荐阅读