Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class TestCreatedUpdated(who_models.CreatedUpdatedByMixin, models.Model):
value = models.CharField('Value', max_length=255)
from django.db import models
class TestMixin:
mixin_field = models.CharField(max_length=23)
class RealClassWithMixin(TestMixin, models.Model):
real_field = models.CharField(max_length=23)
(test_whovedonethis)zapix@zapix-Lenovo-B560:~/projects/test_whovedonethis$ python manage.py sql testmixin
BEGIN;
CREATE TABLE "testmixin_realclasswithmixin" (
"id" integer NOT NULL PRIMARY KEY,
"real_field" varchar(23) NOT NULL
)
;
COMMIT;
from django.db import models
from django.dispatch import receiver
from django.db.models.signals import class_prepared, post_save
def _save_created_by(sender, **kwargs):
"""
сохраняем пользователя, создавшего модель в нужное поле
"""
...
def _set_created_by_signals(sender):
post_save.connect(_save_created_by, sender=sender)
class CreatedByManager(models.Manager):
def contribute_to_class(self, model, name):
class_prepared.connect(_set_created_by_signals, sender=model.__class__)
return super(CreatedByManager, self).contribute_to_class(model, name)
class UpdatedByMixin(models.Model):
def save(self, *args, **kwargs):
from threadlocals import request
self.updated_by = request.user
return super(UpdatedByMixin, self).save(*args, **kwargs)
Кто создал, кто обновил или пишем своё встраиваемое приложение на django