Update reset_polymorphic_ctype, improve ignore_existing parameter
parent
add90aac4f
commit
cf663a0e07
|
|
@ -1,4 +1,5 @@
|
|||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import DEFAULT_DB_ALIAS
|
||||
|
||||
|
||||
def reset_polymorphic_ctype(*models, **filters):
|
||||
|
|
@ -10,12 +11,18 @@ def reset_polymorphic_ctype(*models, **filters):
|
|||
Add ``preserve_existing=True`` to skip models which already
|
||||
have a polymorphic content type.
|
||||
"""
|
||||
preserve_existing = filters.pop('preserve_existing', False)
|
||||
for new_model in models:
|
||||
new_ct = ContentType.objects.get_for_model(new_model)
|
||||
using = filters.pop('using', DEFAULT_DB_ALIAS)
|
||||
ignore_existing = filters.pop('ignore_existing', False)
|
||||
if ignore_existing:
|
||||
# When excluding models, make sure we don't ignore the models we
|
||||
# just assigned the an content type to. hence, start with child first.
|
||||
models = reversed(models)
|
||||
|
||||
qs = new_model.objects.all()
|
||||
if preserve_existing:
|
||||
for new_model in models:
|
||||
new_ct = ContentType.objects.db_manager(using).get_for_model(new_model)
|
||||
|
||||
qs = new_model.objects.db_manager(using)
|
||||
if ignore_existing:
|
||||
qs = qs.filter(polymorphic_ctype__isnull=True)
|
||||
if filters:
|
||||
qs = qs.filter(**filters)
|
||||
|
|
|
|||
Loading…
Reference in New Issue