django - 姜戈。如何实现逻辑以在 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 实现该逻辑。
谢谢
解决方案
您可以创建一个单独的模型来保存用户删除帖子时的时间和 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 并设置当前帖子的删除方法。