For this reason, I want to disable `bulk_create` in all managers in all of
our models. So I added this code:
{{{#!python
class ValidateModelMixin(object):
def save(self, *args, **kwargs):
"""Call `full_clean` before saving."""
self.full_clean()
return super().save(*args, **kwargs)
class ManagerMixin(object):
def bulk_create(self, *args, **kwargs):
raise NotImplementedError("bulk_create is not implemented.")
class BaseModel(ValidateModelMixin, models.Model):
def save(self, *args, **kwargs):
try:
field = self._meta.get_field('id')
if ((not (self.id)) and (hasattr(field, 'id_generator'))):
self.id = field.id_generator()
while
(self._meta.model.objects.filter(id=self.id).exists()):
self.id = field.id_generator()
except FieldDoesNotExist:
pass
return super().save(*args, **kwargs)
class Meta:
abstract = True
class TimeStampedModel(BaseModel):
date_created = models.DateTimeField(auto_now_add=True, db_index=True)
date_updated = models.DateTimeField(auto_now=True, db_index=True)
class Meta:
abstract = True
class BaseManager(ManagerMixin, models.Manager):
pass
class BaseUserManager(ManagerMixin, DjangoBaseUserManager):
pass
}}}
I thought maybe it's good to add these settings - disable `bulk_create` in
all managers and call `self.full_clean()` before saving the models - as an
optional settings both in the project and also in each model (maybe in
`class Meta`) so it will be possible to override Django's default both
per-project and also for any specific model. I understand that the default
is not to call `self.full_clean()` before saving the models and to allow
`bulk_create` in the managers, but I suspect this may lead to invalid data
in the database of the projects.
The current code in the master is on https://github.com/speedy-net/speedy-
net/blob/master/speedy/core/base/models.py, and the code in the branch I'm
currently working on is on https://github.com/speedy-net/speedy-
net/blob/uri_merge_with_master_2019-01-05_a/speedy/core/base/models.py.
--
Ticket URL: <https://code.djangoproject.com/ticket/30080>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* version: 2.1 => 1.11
--
Ticket URL: <https://code.djangoproject.com/ticket/30080#comment:1>
* status: new => closed
* resolution: => wontfix
* component: Uncategorized => Database layer (models, ORM)
Comment:
[https://groups.google.com/d/topic/django-
developers/nv7TldZ_qQI/discussion django-developers discussion]. Aymeric
suggested that these feature requests are too niche and I agree.
In the future, please limit tickets to one idea.
--
Ticket URL: <https://code.djangoproject.com/ticket/30080#comment:2>
Old description:
> class BaseManager(ManagerMixin, models.Manager):
> pass
>
> class BaseUserManager(ManagerMixin, DjangoBaseUserManager):
> pass
>
> /speedy-net/blob/master/speedy/core/base/models.py, and the code in the
> branch I'm currently working on is on https://github.com/speedy-net
> /speedy-
> net/blob/uri_merge_with_master_2019-01-05_a/speedy/core/base/models.py.
New description:
class BaseManager(ManagerMixin, models.Manager):
pass
class BaseUserManager(ManagerMixin, DjangoBaseUserManager):
pass
}}}
net/blob/staging/speedy/core/base/models.py.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/30080#comment:3>