【问题标题】:'User' object has no attribute 'soft_delete' - Django Soft Deletion“用户”对象没有属性“soft_delete” - Django 软删除
【发布时间】:2018-12-31 08:37:11
【问题描述】:

我在我的项目中创建了软删除,它工作正常。但问题是我使用User 内置模型和OneToOneFieldUserProfile。现在soft_delete 函数在UserProfile 模型中,我使用generic.DeleteView 删除用户。问题是我无法将User 的对象传递给UserProfile 以将user_is_deleted 设置为True。这是我的代码。

Views.py

class UserDeleteView(LoginRequiredMixin, generic.DeleteView):
    model = User
    template_name = 'users/user_confirm_delete.html'
    success_url = '/users/'

    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        self.object.soft_delete()
        return HttpResponseRedirect(self.get_success_url())

模型.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_company = models.ForeignKey(Company, on_delete=models.CASCADE)
    user_role = models.ForeignKey(Roles, on_delete=models.CASCADE)
    user_is_deleted = models.BooleanField(default=False)
    user_deleted_at = models.DateTimeField(blank=True, null=True)

    def soft_delete(self):
        self.user_is_deleted = True
        self.user_deleted_at  = timezone.now() - tdelta(days=-1)
        self.save()

软删除参考 - https://blog.khophi.co/soft-delete-django-quickly/

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案1】:

    改变这个

    @classmethod
    def soft_delete(self):
        ...
    

    【讨论】:

      【解决方案2】:

      将您的 delete() 方法更改为,

      def delete(self, request, *args, **kwargs):
          self.object = self.get_object()
          self.object.userprofile.soft_delete()
          return HttpResponseRedirect(self.get_success_url())

      【讨论】:

        猜你喜欢
        • 2020-03-10
        • 2011-12-14
        • 2018-08-09
        • 1970-01-01
        • 2020-01-12
        • 2013-05-13
        • 2019-06-23
        • 2016-02-02
        • 2018-02-15
        相关资源
        最近更新 更多