Próbuję przepisać metodę get_by_natural_key na menedżerze django (models.Manager). Po dodaniu modelu (NexchangeModel) mogę usunąć wszystkie() obiekty, ale pojedyncze - nie mogę.Django nie może usunąć pojedynczego obiektu po przepisaniu modelu. Metoda menedżera
potrafi:
SmsToken.objects.all().delete()
nie może:
SmsTokent.objects.last().delete()
Kod:
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)
Co stanie się, gdy spróbujesz? –
na wszystkich() Otrzymuję komunikat delete .: ie (1, {'accounts.SmsToken': 1}). Na last() nic (None), ale powinno również dać podobny komunikat (pk rekordu, który właśnie został usunięty). –
'all()' zwraca instancję 'QuerySet',' last() '. Dlatego nie byłbym zaskoczony innym zachowaniem, ponieważ pierwszą funkcją usuwania jest menedżer/zestaw kwerend i drugi model twojego modelu. Oczywiście to nie wyjaśnia, dlaczego usuwanie nie działa ... – arie