我以永不删除的方式设置了模型,而是将状态更新为状态“已删除”。为此,我重写了delete()方法,如下所示:
def delete(self, using=None, keep_parents=False):
self.status = Booking.DELETED
self.save()
并添加了两个自定义管理器以跟踪已删除的未删除预订,将标准管理器与交换,仅返回未删除的对象。
class BookingManager(models.Manager):
def get_queryset(self):
return super().get_queryset().exclude(status=Booking.DELETED)
class BookingDeletedManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status=Booking.DELETED)
class Booking(models.Model):
PAYED = 0
PENDING = 1
OPEN = 2
CANCELLED = 3
DELETED = 4
objects = BookingManager()
deleted_objects = BookingDeletedManager()
...
现在,当我有一个预订对象并将其删除时
booking.delete()
像这样刷新它
booking.refresh_from_db()
我得到了错误
.models.DoesNotExist: Booking matching query does not exist
如果我使用正确的管理器
Booking.deleted_objects.get(pk=booking.id)
我正确地获得了预订信息,我假设refresh_from_db方法使用的标准对象管理器找不到正确的预订信息。有没有解决这个问题的方法,还是我错误地解决了这个问题?
答案 0 :(得分:1)
refresh_from_db
只是models.Model
类中的一个方法,因此您可以在Booking
模型中覆盖它。参见此处获取源代码:
https://docs.djangoproject.com/en/2.1/_modules/django/db/models/base/#Model.refresh_from_db
您只需要更改db_instance_qs
即可使用BookingDeletedManager()