LIL-229. Add soft delete functional for Course & Lesson model

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 77a0bb26e8
commit bd94c0977f
  1. 23
      apps/course/migrations/0031_auto_20180213_0906.py
  2. 6
      apps/course/models.py
  3. 38
      project/mixins.py

@ -0,0 +1,23 @@
# Generated by Django 2.0.2 on 2018-02-13 09:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course', '0030_auto_20180212_0537'),
]
operations = [
migrations.AddField(
model_name='course',
name='deactivated_at',
field=models.DateTimeField(blank=True, default=None, null=True),
),
migrations.AddField(
model_name='lesson',
name='deactivated_at',
field=models.DateTimeField(blank=True, default=None, null=True),
),
]

@ -7,6 +7,8 @@ from django.contrib.auth import get_user_model
from django.urls import reverse_lazy
from polymorphic_tree.models import PolymorphicMPTTModel, PolymorphicTreeForeignKey
from project.mixins import BaseModel, DeactivatedMixin
from .manager import CategoryQuerySet
from apps.content.models import ImageObject, Gallery
@ -25,7 +27,7 @@ def default_slug():
return str(uuid4())
class Course(models.Model):
class Course(BaseModel, DeactivatedMixin):
PENDING = 0
PUBLISHED = 1
ARCHIVED = 2
@ -141,7 +143,7 @@ class Category(models.Model):
ordering = ['title']
class Lesson(models.Model):
class Lesson(BaseModel, DeactivatedMixin):
title = models.CharField('Название урока', max_length=100)
short_description = models.TextField('Краткое описание урока')
course = models.ForeignKey(

@ -0,0 +1,38 @@
from django.db import models
from django.utils import timezone
class BaseModel(models.Model):
class Meta:
abstract = True
class DeactivatedQueryset(models.Manager):
def allow_delete(self):
super().delete()
def delete(self):
count = self.count()
self.filter(deactivated_at__isnull=True).update(
deactivated_at=timezone.now()
)
return (count, None)
class DeactivatedMixin(models.Model):
deactivated_at = models.DateTimeField(null=True, blank=True, default=None)
objects = DeactivatedQueryset()
class Meta:
abstract = True
def allow_delete(self, using=None, keep_parents=False):
super().delete(using=using, keep_parents=keep_parents)
def delete(self, using=None, keep_parents=False):
if not self.deactivated_at:
self.deactivated_at = timezone.now()
self.save()
Loading…
Cancel
Save