mirror of
https://github.com/django-polymorphic/django-polymorphic.git
synced 2026-02-14 02:30:23 +03:00
Merge pull request #716 from bckohan/master
Add a test for extending a normal base model as polymorphic
This commit is contained in:
commit
ec19ef4bbc
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 4.2 on 2025-12-11 17:03
|
||||
# Generated by Django 4.2 on 2025-12-11 18:22
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
|
@ -230,6 +230,13 @@ class Migration(migrations.Migration):
|
|||
'base_manager_name': 'objects',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NormalBase',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nb_field', models.IntegerField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='One2OneRelatingModel',
|
||||
fields=[
|
||||
|
|
@ -642,6 +649,14 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
bases=('tests.proxybase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NormalExtension',
|
||||
fields=[
|
||||
('normalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tests.normalbase')),
|
||||
('ne_field', models.CharField(max_length=12)),
|
||||
],
|
||||
bases=('tests.normalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='One2OneRelatingModelDerived',
|
||||
fields=[
|
||||
|
|
@ -1204,6 +1219,19 @@ class Migration(migrations.Migration):
|
|||
],
|
||||
bases=('tests.plainb',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PolyExtension',
|
||||
fields=[
|
||||
('normalextension_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tests.normalextension')),
|
||||
('poly_ext_field', models.IntegerField()),
|
||||
('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
'base_manager_name': 'objects',
|
||||
},
|
||||
bases=('tests.normalextension', models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ProxyModelA',
|
||||
fields=[
|
||||
|
|
@ -1340,6 +1368,18 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
bases=('tests.model2c',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PolyExtChild',
|
||||
fields=[
|
||||
('polyextension_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tests.polyextension')),
|
||||
('poly_child_field', models.CharField(max_length=12)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
'base_manager_name': 'objects',
|
||||
},
|
||||
bases=('tests.polyextension',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UUIDArtProjectB',
|
||||
fields=[
|
||||
|
|
|
|||
|
|
@ -714,3 +714,19 @@ class FKTest(models.Model):
|
|||
|
||||
class NoChildren(PolymorphicModel):
|
||||
field1 = models.CharField(max_length=12)
|
||||
|
||||
|
||||
class NormalBase(models.Model):
|
||||
nb_field = models.IntegerField()
|
||||
|
||||
|
||||
class NormalExtension(NormalBase):
|
||||
ne_field = models.CharField(max_length=12)
|
||||
|
||||
|
||||
class PolyExtension(PolymorphicModel, NormalExtension):
|
||||
poly_ext_field = models.IntegerField()
|
||||
|
||||
|
||||
class PolyExtChild(PolyExtension):
|
||||
poly_child_field = models.CharField(max_length=12)
|
||||
|
|
|
|||
|
|
@ -1707,3 +1707,31 @@ class PolymorphicTests(TransactionTestCase):
|
|||
|
||||
assert fk_test.fk == child
|
||||
assert isinstance(fk_test.fk, FKTestChild)
|
||||
|
||||
def test_polymorphic_extension(self):
|
||||
from polymorphic.tests.models import (
|
||||
NormalBase,
|
||||
NormalExtension,
|
||||
PolyExtension,
|
||||
PolyExtChild,
|
||||
)
|
||||
|
||||
nb = NormalBase.objects.create(nb_field=5)
|
||||
ne = NormalExtension.objects.create(nb_field=6, ne_field="normal ext")
|
||||
poly_ext = PolyExtension.objects.create(nb_field=6, ne_field="poly ext", poly_ext_field=7)
|
||||
child_ext = PolyExtChild.objects.create(
|
||||
nb_field=7, ne_field="child ext", poly_ext_field=8, poly_child_field="poly child"
|
||||
)
|
||||
assert set(NormalBase.objects.all()) == {
|
||||
nb,
|
||||
NormalBase.objects.get(pk=ne.pk),
|
||||
NormalBase.objects.get(pk=poly_ext.pk),
|
||||
NormalBase.objects.get(pk=child_ext.pk),
|
||||
}
|
||||
assert set(NormalExtension.objects.all()) == {
|
||||
NormalExtension.objects.get(pk=ne.pk),
|
||||
NormalExtension.objects.get(pk=poly_ext.pk),
|
||||
NormalExtension.objects.get(pk=child_ext.pk),
|
||||
}
|
||||
assert set(PolyExtension.objects.all()) == {poly_ext, child_ext}
|
||||
assert set(PolyExtChild.objects.all()) == {child_ext}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user