Developer opmerkingen
django-logicaldelete is een klein en eenvoudig app die ik gooide samen om een aantal hergebruik uit iets wat ik doe in bijna elk project en elk model I creëren & nbsp;. Het is te gemakkelijk om goede gegevens te krijgen geschrapt en het zijn onherstelbaar. Het is ook te makkelijk om dit op te lossen door dwingende delete methode van het model () en net markeren platen als verwijderd en dan gebruik te maken van Django's Managers om standaard gedrag overschrijven zodat logisch verwijderde items niet worden geretourneerd in QuerySets.
Er zijn twee uitzonderingen echter dat ik nuttig heb gevonden op deze regel.
& Nbsp; 1. In de admin ik graag alles te zien met een indicator van het al dan niet is verwijderd, met de mogelijkheid om af te filteren om alleen actieve records (of verwijderd voor die kwestie).
& Nbsp; 2. Ik denk nog steeds dat het een geldig verzoek wanneer een item wordt opgehaald door het primaire sleutel waarde, dat het object moet terugkeren, zelfs als het is gemarkeerd als verwijderd.
Met behulp van django-logicaldelete
Met behulp van de app is vrij eenvoudig:
& Nbsp; 1. Zet de submap logicaldelete in uw Python Path.
& Nbsp; 2. Erven van logicaldelete.models.Model voor alle modellen die u wilt delen in deze functionaliteit.
& Nbsp; 3. Maak en / of admins registreren voor elk van deze modellen gebruik logicaldelete.admin.ModelAdmin
Extra
Logische verwijderingen worden behandeld door datumafstempeling een date_removed kolom. Bovendien zal een date_created en date_modified kolommen worden gevuld gemak.
Mogelijke Extensies
U kunt eenvoudig subklasse deze twee klassen om generieke en nuttige functionaliteit bieden aan uw modellen.
UUID Primary Key
Ik gebruik meestal UUID velden voor mijn primaire sleutels, omdat ze in staat me te shard mijn tafels of en wanneer ik moet, daarnaast bieden ze een versluierd id om mijn gegevens (mensen kunnen niet bepalen hoeveel van een bepaald object Ik heb in mijn database als ik niet wil dat ze weten, maar gewoon op zoek een een integer id in de URL).
Sequence gebied
Vele malen heb ik het nuttig vinden om een integer veld op mijn modellen die het mogelijk maken voor en expliciet gecontroleerd sequencing. Ik heb dit normaal implementeren als een soort aflopende implementatie waar de data wordt gesorteerd van hoog naar laag door opeenvolging waarde.
Om dit te implementeren zou je zowel de Model en ModelAdmin, waar het model een duidelijk eenvoudige toevoeging van een IntegerField, de ModelAdmin, zou zijn zou get_query_set overschrijven subklasse, om iets te doen, zoals:
klasse SequencedModel (logicaldelete.models.Model):
& Nbsp; opeenvolging = models.IntegerField ()
klasse MyLogicalDeletedManager (logicaldelete.models.LogicalDeletedManager):
& Nbsp; def get_query_set (zelf):
& Nbsp; Als self.model:
& Nbsp;. Qs = super (MyLogicalDeletedManager, self) .get_query_set () filteren (date_removed__isnull = True)
& Nbsp; Als SequencedModel in inspect.getmro (self.model):
& Nbsp; qs = qs.order_by ('- reeks')
& Nbsp; return qs
Wat is nieuw in deze release:
- Veranderd alles te all_with_deleted op LogicalDeleteManager
- LogicalDeleteManager verplaatst van logicaldelete.models tot logicaldelete.managers
- Verwijderd verwijderd en alles QuerySets van logicaldelete.models.Model
Eisen
- Python
- Django
Reacties niet gevonden