我试图在django manager(models.Manager)上重写get_by_natural_key方法。添加模型(NexchangeModel)后,我可以删除所有()对象,但单个 - 不能。Django无法在重写model.Manager方法后删除单个对象
可以:
SmsToken.objects.all().delete()
不能:
SmsTokent.objects.last().delete()
代码:
from django.db import models
from core.common.models import SoftDeletableModel, TimeStampedModel, UniqueFieldMixin
class NexchangeManager(models.Manager):
def get_by_natural_key(self, param):
qs = self.get_queryset()
lookup = {qs.model.NATURAL_KEY: param}
return self.get(**lookup)
class NexchangeModel(models.Model):
class Meta:
abstract = True
objects = NexchangeManager()
class SmsToken(NexchangeModel, SoftDeletableModel, UniqueFieldMixin):
sms_token = models.CharField(
max_length=4, blank=True)
user = models.ForeignKey(User, related_name='sms_token')
send_count = models.IntegerField(default=0)
当您尝试时会发生什么情况? –
on all()我得到删除消息:例如:(1,{'accounts.SmsToken':1})。在last()上没有(None),但它也应该给出类似的消息(刚刚删除的记录pk)。 –
'all()'返回一个'QuerySet','last()'一个实例。因此,我不会因为不同的行为而感到惊讶,因为第一个删除函数是Manager/QuerySet中的一个,而第二个删除函数是您的模型之一。当然,这并不能解释为什么删除不起作用... – arie