Model cleanups for example app and it's management commands
parent
819be4b602
commit
fea5f5a77e
|
|
@ -26,36 +26,6 @@ admin.site.register(ArtProject, ProjectChildAdmin)
|
||||||
admin.site.register(ResearchProject, ProjectChildAdmin)
|
admin.site.register(ResearchProject, ProjectChildAdmin)
|
||||||
|
|
||||||
|
|
||||||
class ModelAAdmin(PolymorphicParentModelAdmin):
|
|
||||||
base_model = ModelA
|
|
||||||
list_filter = (PolymorphicChildModelFilter,)
|
|
||||||
child_models = (ModelA, ModelB, ModelC)
|
|
||||||
|
|
||||||
|
|
||||||
class ModelAChildAdmin(PolymorphicChildModelAdmin):
|
|
||||||
base_model = ModelA
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(ModelA, ModelAAdmin)
|
|
||||||
admin.site.register(ModelB, ModelAChildAdmin)
|
|
||||||
admin.site.register(ModelC, ModelAChildAdmin)
|
|
||||||
|
|
||||||
|
|
||||||
class Model2AAdmin(PolymorphicParentModelAdmin):
|
|
||||||
base_model = Model2A
|
|
||||||
list_filter = (PolymorphicChildModelFilter,)
|
|
||||||
child_models = (Model2A, Model2B, Model2C)
|
|
||||||
|
|
||||||
|
|
||||||
class Model2AChildAdmin(PolymorphicChildModelAdmin):
|
|
||||||
base_model = Model2A
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Model2A, Model2AAdmin)
|
|
||||||
admin.site.register(Model2B, Model2AChildAdmin)
|
|
||||||
admin.site.register(Model2C, Model2AChildAdmin)
|
|
||||||
|
|
||||||
|
|
||||||
class UUIDModelAAdmin(PolymorphicParentModelAdmin):
|
class UUIDModelAAdmin(PolymorphicParentModelAdmin):
|
||||||
base_model = UUIDModelA
|
base_model = UUIDModelA
|
||||||
list_filter = (PolymorphicChildModelFilter,)
|
list_filter = (PolymorphicChildModelFilter,)
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,7 @@
|
||||||
This module is a scratchpad for general development, testing & debugging
|
This module is a scratchpad for general development, testing & debugging
|
||||||
Well, even more so than pcmd.py. You best ignore p2cmd.py.
|
Well, even more so than pcmd.py. You best ignore p2cmd.py.
|
||||||
"""
|
"""
|
||||||
import uuid
|
|
||||||
import django
|
|
||||||
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
from django.db import connection
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
|
|
@ -16,7 +12,7 @@ from pexp.models import *
|
||||||
|
|
||||||
|
|
||||||
def reset_queries():
|
def reset_queries():
|
||||||
if django.VERSION < (1, 9):
|
if django.VERSION < (1, 8):
|
||||||
connection.queries = []
|
connection.queries = []
|
||||||
else:
|
else:
|
||||||
connection.queries_log.clear()
|
connection.queries_log.clear()
|
||||||
|
|
@ -58,20 +54,20 @@ class Command(NoArgsCommand):
|
||||||
|
|
||||||
def handle_noargs(self, **options):
|
def handle_noargs(self, **options):
|
||||||
if False:
|
if False:
|
||||||
ModelA.objects.all().delete()
|
TestModelA.objects.all().delete()
|
||||||
a = ModelA.objects.create(field1='A1')
|
a = TestModelA.objects.create(field1='A1')
|
||||||
b = ModelB.objects.create(field1='B1', field2='B2')
|
b = TestModelB.objects.create(field1='B1', field2='B2')
|
||||||
c = ModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
c = TestModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
||||||
reset_queries()
|
reset_queries()
|
||||||
print ModelC.base_objects.all()
|
print TestModelC.base_objects.all()
|
||||||
show_queries()
|
show_queries()
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
ModelA.objects.all().delete()
|
TestModelA.objects.all().delete()
|
||||||
for i in xrange(1000):
|
for i in xrange(1000):
|
||||||
a = ModelA.objects.create(field1=str(i % 100))
|
a = TestModelA.objects.create(field1=str(i % 100))
|
||||||
b = ModelB.objects.create(field1=str(i % 100), field2=str(i % 200))
|
b = TestModelB.objects.create(field1=str(i % 100), field2=str(i % 200))
|
||||||
c = ModelC.objects.create(field1=str(i % 100), field2=str(i % 200), field3=str(i % 300))
|
c = TestModelC.objects.create(field1=str(i % 100), field2=str(i % 200), field3=str(i % 300))
|
||||||
if i % 100 == 0:
|
if i % 100 == 0:
|
||||||
print i
|
print i
|
||||||
|
|
||||||
|
|
@ -83,11 +79,11 @@ class Command(NoArgsCommand):
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
nModelA.objects.all().delete()
|
NormalModelA.objects.all().delete()
|
||||||
a = nModelA.objects.create(field1='A1')
|
a = NormalModelA.objects.create(field1='A1')
|
||||||
b = nModelB.objects.create(field1='B1', field2='B2')
|
b = NormalModelB.objects.create(field1='B1', field2='B2')
|
||||||
c = nModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
c = NormalModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
||||||
qs = ModelA.objects.raw("SELECT * from pexp_modela")
|
qs = TestModelA.objects.raw("SELECT * from pexp_testmodela")
|
||||||
for o in list(qs):
|
for o in list(qs):
|
||||||
print o
|
print o
|
||||||
|
|
||||||
|
|
@ -99,14 +95,14 @@ rnd = Random()
|
||||||
def poly_sql_query():
|
def poly_sql_query():
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT id, pexp_modela.field1, pexp_modelb.field2, pexp_modelc.field3
|
SELECT id, pexp_testmodela.field1, pexp_testmodelb.field2, pexp_testmodelc.field3
|
||||||
FROM pexp_modela
|
FROM pexp_testmodela
|
||||||
LEFT OUTER JOIN pexp_modelb
|
LEFT OUTER JOIN pexp_testmodelb
|
||||||
ON pexp_modela.id = pexp_modelb.modela_ptr_id
|
ON pexp_testmodela.id = pexp_testmodelb.testmodela_ptr_id
|
||||||
LEFT OUTER JOIN pexp_modelc
|
LEFT OUTER JOIN pexp_testmodelc
|
||||||
ON pexp_modelb.modela_ptr_id = pexp_modelc.modelb_ptr_id
|
ON pexp_testmodelb.testmodela_ptr_id = pexp_testmodelc.testmodelb_ptr_id
|
||||||
WHERE pexp_modela.field1=%i
|
WHERE pexp_testmodela.field1=%i
|
||||||
ORDER BY pexp_modela.id
|
ORDER BY pexp_testmodela.id
|
||||||
""" % rnd.randint(0, 100) )
|
""" % rnd.randint(0, 100) )
|
||||||
# row=cursor.fetchone()
|
# row=cursor.fetchone()
|
||||||
return
|
return
|
||||||
|
|
@ -115,10 +111,10 @@ def poly_sql_query():
|
||||||
def poly_sql_query2():
|
def poly_sql_query2():
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT id, pexp_modela.field1
|
SELECT id, pexp_testmodela.field1
|
||||||
FROM pexp_modela
|
FROM pexp_testmodela
|
||||||
WHERE pexp_modela.field1=%i
|
WHERE pexp_testmodela.field1=%i
|
||||||
ORDER BY pexp_modela.id
|
ORDER BY pexp_testmodela.id
|
||||||
""" % rnd.randint(0, 100) )
|
""" % rnd.randint(0, 100) )
|
||||||
# row=cursor.fetchone()
|
# row=cursor.fetchone()
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ This module is a scratchpad for general development, testing & debugging.
|
||||||
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from pprint import pprint
|
|
||||||
|
|
||||||
from pexp.models import *
|
from pexp.models import *
|
||||||
|
|
||||||
|
|
@ -14,14 +13,6 @@ def reset_queries():
|
||||||
connection.queries = []
|
connection.queries = []
|
||||||
|
|
||||||
|
|
||||||
def show_queries():
|
|
||||||
print
|
|
||||||
print 'QUERIES:', len(connection.queries)
|
|
||||||
pprint(connection.queries)
|
|
||||||
print
|
|
||||||
connection.queries = []
|
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(NoArgsCommand):
|
||||||
help = ""
|
help = ""
|
||||||
|
|
||||||
|
|
@ -33,9 +24,9 @@ class Command(NoArgsCommand):
|
||||||
print Project.objects.all()
|
print Project.objects.all()
|
||||||
print
|
print
|
||||||
|
|
||||||
ModelA.objects.all().delete()
|
TestModelA.objects.all().delete()
|
||||||
a = ModelA.objects.create(field1='A1')
|
a = TestModelA.objects.create(field1='A1')
|
||||||
b = ModelB.objects.create(field1='B1', field2='B2')
|
b = TestModelB.objects.create(field1='B1', field2='B2')
|
||||||
c = ModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
c = TestModelC.objects.create(field1='C1', field2='C2', field3='C3')
|
||||||
print ModelA.objects.all()
|
print TestModelA.objects.all()
|
||||||
print
|
print
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
This module is a scratchpad for general development, testing & debugging
|
This module is a scratchpad for general development, testing & debugging
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import django
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
@ -14,7 +13,7 @@ num_objects = 1000
|
||||||
|
|
||||||
|
|
||||||
def reset_queries():
|
def reset_queries():
|
||||||
if django.VERSION < (1, 9):
|
if django.VERSION < (1, 8):
|
||||||
connection.queries = []
|
connection.queries = []
|
||||||
else:
|
else:
|
||||||
connection.queries_log.clear()
|
connection.queries_log.clear()
|
||||||
|
|
@ -57,9 +56,9 @@ def print_timing(func, message='', iterations=1):
|
||||||
|
|
||||||
def run_vanilla_any_poly(func, iterations=1):
|
def run_vanilla_any_poly(func, iterations=1):
|
||||||
f = print_timing(func, ' ', iterations)
|
f = print_timing(func, ' ', iterations)
|
||||||
f(nModelC)
|
f(NormalModelC)
|
||||||
f = print_timing(func, 'poly ', iterations)
|
f = print_timing(func, 'poly ', iterations)
|
||||||
f(ModelC)
|
f(TestModelC)
|
||||||
|
|
||||||
|
|
||||||
###################################################################################
|
###################################################################################
|
||||||
|
|
|
||||||
|
|
@ -4,24 +4,10 @@ This module is a scratchpad for general development, testing & debugging
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
from django.db import connection
|
|
||||||
from pprint import pprint
|
|
||||||
|
|
||||||
from pexp.models import *
|
from pexp.models import *
|
||||||
|
|
||||||
|
|
||||||
def reset_queries():
|
|
||||||
connection.queries = []
|
|
||||||
|
|
||||||
|
|
||||||
def show_queries():
|
|
||||||
print
|
|
||||||
print 'QUERIES:', len(connection.queries)
|
|
||||||
pprint(connection.queries)
|
|
||||||
print
|
|
||||||
connection.queries = []
|
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(NoArgsCommand):
|
||||||
help = ""
|
help = ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,28 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by Django 1.9b1 on 2015-10-23 22:20
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
|
||||||
import polymorphic.showfields
|
import polymorphic.showfields
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('contenttypes', '0002_remove_content_type_name'),
|
('contenttypes', '0002_remove_content_type_name'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Model2A',
|
name='NormalModelA',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
('field1', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'abstract': False,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='ModelA',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('field1', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'abstract': False,
|
|
||||||
},
|
|
||||||
bases=(polymorphic.showfields.ShowFieldTypeAndContent, models.Model),
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='nModelA',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('field1', models.CharField(max_length=10)),
|
('field1', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Project',
|
name='Project',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
('topic', models.CharField(max_length=30)),
|
('topic', models.CharField(max_length=30)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
@ -58,18 +33,29 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='ProxyBase',
|
name='ProxyBase',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
('title', models.CharField(max_length=200)),
|
('title', models.CharField(max_length=200)),
|
||||||
('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_pexp.proxybase_set+', to='contenttypes.ContentType')),
|
('polymorphic_ctype', models.ForeignKey(related_name='polymorphic_pexp.proxybase_set+', editable=False, to='contenttypes.ContentType', null=True)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ('title',),
|
'ordering': ('title',),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='TestModelA',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
|
('field1', models.CharField(max_length=10)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=(polymorphic.showfields.ShowFieldTypeAndContent, models.Model),
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UUIDModelA',
|
name='UUIDModelA',
|
||||||
fields=[
|
fields=[
|
||||||
('uuid_primary_key', models.UUIDField(primary_key=True, serialize=False)),
|
('uuid_primary_key', models.UUIDField(serialize=False, primary_key=True)),
|
||||||
('field1', models.CharField(max_length=10)),
|
('field1', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
@ -80,7 +66,7 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='ArtProject',
|
name='ArtProject',
|
||||||
fields=[
|
fields=[
|
||||||
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.Project')),
|
('project_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.Project')),
|
||||||
('artist', models.CharField(max_length=30)),
|
('artist', models.CharField(max_length=30)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
@ -89,39 +75,17 @@ class Migration(migrations.Migration):
|
||||||
bases=('pexp.project',),
|
bases=('pexp.project',),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Model2B',
|
name='NormalModelB',
|
||||||
fields=[
|
fields=[
|
||||||
('model2a_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.Model2A')),
|
('normalmodela_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.NormalModelA')),
|
||||||
('field2', models.CharField(max_length=10)),
|
('field2', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
options={
|
bases=('pexp.normalmodela',),
|
||||||
'abstract': False,
|
|
||||||
},
|
|
||||||
bases=('pexp.model2a',),
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='ModelB',
|
|
||||||
fields=[
|
|
||||||
('modela_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.ModelA')),
|
|
||||||
('field2', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'abstract': False,
|
|
||||||
},
|
|
||||||
bases=('pexp.modela',),
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='nModelB',
|
|
||||||
fields=[
|
|
||||||
('nmodela_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.nModelA')),
|
|
||||||
('field2', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
bases=('pexp.nmodela',),
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='ResearchProject',
|
name='ResearchProject',
|
||||||
fields=[
|
fields=[
|
||||||
('project_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.Project')),
|
('project_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.Project')),
|
||||||
('supervisor', models.CharField(max_length=30)),
|
('supervisor', models.CharField(max_length=30)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
@ -129,10 +93,21 @@ class Migration(migrations.Migration):
|
||||||
},
|
},
|
||||||
bases=('pexp.project',),
|
bases=('pexp.project',),
|
||||||
),
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='TestModelB',
|
||||||
|
fields=[
|
||||||
|
('testmodela_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.TestModelA')),
|
||||||
|
('field2', models.CharField(max_length=10)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('pexp.testmodela',),
|
||||||
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UUIDModelB',
|
name='UUIDModelB',
|
||||||
fields=[
|
fields=[
|
||||||
('uuidmodela_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.UUIDModelA')),
|
('uuidmodela_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.UUIDModelA')),
|
||||||
('field2', models.CharField(max_length=10)),
|
('field2', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
@ -143,22 +118,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='uuidmodela',
|
model_name='uuidmodela',
|
||||||
name='polymorphic_ctype',
|
name='polymorphic_ctype',
|
||||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_pexp.uuidmodela_set+', to='contenttypes.ContentType'),
|
field=models.ForeignKey(related_name='polymorphic_pexp.uuidmodela_set+', editable=False, to='contenttypes.ContentType', null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='testmodela',
|
||||||
|
name='polymorphic_ctype',
|
||||||
|
field=models.ForeignKey(related_name='polymorphic_pexp.testmodela_set+', editable=False, to='contenttypes.ContentType', null=True),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='project',
|
model_name='project',
|
||||||
name='polymorphic_ctype',
|
name='polymorphic_ctype',
|
||||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_pexp.project_set+', to='contenttypes.ContentType'),
|
field=models.ForeignKey(related_name='polymorphic_pexp.project_set+', editable=False, to='contenttypes.ContentType', null=True),
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='modela',
|
|
||||||
name='polymorphic_ctype',
|
|
||||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_pexp.modela_set+', to='contenttypes.ContentType'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='model2a',
|
|
||||||
name='polymorphic_ctype',
|
|
||||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_pexp.model2a_set+', to='contenttypes.ContentType'),
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='ProxyA',
|
name='ProxyA',
|
||||||
|
|
@ -179,39 +149,29 @@ class Migration(migrations.Migration):
|
||||||
bases=('pexp.proxybase',),
|
bases=('pexp.proxybase',),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Model2C',
|
name='NormalModelC',
|
||||||
fields=[
|
fields=[
|
||||||
('model2b_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.Model2B')),
|
('normalmodelb_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.NormalModelB')),
|
||||||
('field3', models.CharField(max_length=10)),
|
('field3', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
|
bases=('pexp.normalmodelb',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='TestModelC',
|
||||||
|
fields=[
|
||||||
|
('testmodelb_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.TestModelB')),
|
||||||
|
('field3', models.CharField(max_length=10)),
|
||||||
|
('field4', models.ManyToManyField(related_name='related_c', to='pexp.TestModelB')),
|
||||||
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
},
|
},
|
||||||
bases=('pexp.model2b',),
|
bases=('pexp.testmodelb',),
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='ModelC',
|
|
||||||
fields=[
|
|
||||||
('modelb_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.ModelB')),
|
|
||||||
('field3', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'abstract': False,
|
|
||||||
},
|
|
||||||
bases=('pexp.modelb',),
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='nModelC',
|
|
||||||
fields=[
|
|
||||||
('nmodelb_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.nModelB')),
|
|
||||||
('field3', models.CharField(max_length=10)),
|
|
||||||
],
|
|
||||||
bases=('pexp.nmodelb',),
|
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UUIDModelC',
|
name='UUIDModelC',
|
||||||
fields=[
|
fields=[
|
||||||
('uuidmodelb_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pexp.UUIDModelB')),
|
('uuidmodelb_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pexp.UUIDModelB')),
|
||||||
('field3', models.CharField(max_length=10)),
|
('field3', models.CharField(max_length=10)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.9b1 on 2015-10-24 01:42
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pexp', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='modelc',
|
|
||||||
name='field4',
|
|
||||||
field=models.ManyToManyField(related_name='related_c', to='pexp.ModelB'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -8,6 +8,7 @@ from polymorphic.showfields import ShowFieldContent, ShowFieldTypeAndContent
|
||||||
|
|
||||||
|
|
||||||
class Project(ShowFieldContent, PolymorphicModel):
|
class Project(ShowFieldContent, PolymorphicModel):
|
||||||
|
"""Polymorphic model"""
|
||||||
topic = models.CharField(max_length=30)
|
topic = models.CharField(max_length=30)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -19,42 +20,6 @@ class ResearchProject(Project):
|
||||||
supervisor = models.CharField(max_length=30)
|
supervisor = models.CharField(max_length=30)
|
||||||
|
|
||||||
|
|
||||||
class ModelA(ShowFieldTypeAndContent, PolymorphicModel):
|
|
||||||
field1 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class ModelB(ModelA):
|
|
||||||
field2 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class ModelC(ModelB):
|
|
||||||
field3 = models.CharField(max_length=10)
|
|
||||||
field4 = models.ManyToManyField(ModelB, related_name='related_c')
|
|
||||||
|
|
||||||
|
|
||||||
class nModelA(models.Model):
|
|
||||||
field1 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class nModelB(nModelA):
|
|
||||||
field2 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class nModelC(nModelB):
|
|
||||||
field3 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class Model2A(PolymorphicModel):
|
|
||||||
field1 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class Model2B(Model2A):
|
|
||||||
field2 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class Model2C(Model2B):
|
|
||||||
field3 = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
if django.VERSION < (1, 8):
|
if django.VERSION < (1, 8):
|
||||||
from polymorphic.tools_for_tests import UUIDField
|
from polymorphic.tools_for_tests import UUIDField
|
||||||
else:
|
else:
|
||||||
|
|
@ -62,6 +27,7 @@ else:
|
||||||
|
|
||||||
|
|
||||||
class UUIDModelA(ShowFieldTypeAndContent, PolymorphicModel):
|
class UUIDModelA(ShowFieldTypeAndContent, PolymorphicModel):
|
||||||
|
"""UUID as primary key example"""
|
||||||
uuid_primary_key = UUIDField(primary_key=True)
|
uuid_primary_key = UUIDField(primary_key=True)
|
||||||
field1 = models.CharField(max_length=10)
|
field1 = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
@ -75,6 +41,7 @@ class UUIDModelC(UUIDModelB):
|
||||||
|
|
||||||
|
|
||||||
class ProxyBase(PolymorphicModel):
|
class ProxyBase(PolymorphicModel):
|
||||||
|
"""Proxy model example - a single table with multiple types."""
|
||||||
title = models.CharField(max_length=200)
|
title = models.CharField(max_length=200)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|
@ -100,3 +67,31 @@ class ProxyB(ProxyBase):
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u"<ProxyB: {0}>".format(self.title)
|
return u"<ProxyB: {0}>".format(self.title)
|
||||||
|
|
||||||
|
|
||||||
|
# Internals for management command tests
|
||||||
|
|
||||||
|
class TestModelA(ShowFieldTypeAndContent, PolymorphicModel):
|
||||||
|
field1 = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
||||||
|
class TestModelB(TestModelA):
|
||||||
|
field2 = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
||||||
|
class TestModelC(TestModelB):
|
||||||
|
field3 = models.CharField(max_length=10)
|
||||||
|
field4 = models.ManyToManyField(TestModelB, related_name='related_c')
|
||||||
|
|
||||||
|
|
||||||
|
class NormalModelA(models.Model):
|
||||||
|
"""Normal Django inheritance, no polymorphic behavior"""
|
||||||
|
field1 = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
||||||
|
class NormalModelB(NormalModelA):
|
||||||
|
field2 = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
||||||
|
class NormalModelC(NormalModelB):
|
||||||
|
field3 = models.CharField(max_length=10)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue