Opened 5 years ago
Closed 5 years ago
#31074 closed Uncategorized (invalid)
Errors model abstract testing.
Reported by: | Artem | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.0 |
Severity: | Normal | Keywords: | test, ManyToManyField, abstract, model |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I have models:
class Country(models.Model): name = models.CharField(_("Country name"), max_length=50) code = models.SlugField(_("Country iso-2 code"), max_length=2, unique=True)
class CountryModelMixin(models.Model): countries_admin = models.ManyToManyField( Country, verbose_name="Страны", related_name="%(app_label)s_%(class)s_related", related_query_name="%(app_label)s_%(class)ss", ) countries = ArrayField( models.SlugField(verbose_name=_("Country iso-2 code"), max_length=2), verbose_name=_("Countries"), blank=True, null=True, ) class Meta(object): abstract = True @staticmethod def update_hidden(sender, instance, **kwargs): if issubclass(instance.__class__, CountryModelMixin): instance.countries = countries.countries_admin.values_list('code', flat=True) m2m_changed.connect(CountryModelMixin.update_hidden)
class Orgaization(CountryModelMixin): name = models.CharField(_("Name"), max_length=127) slug = models.SlugField(_("Slug"), max_length=127, unique=True) active = models.BooleanField(_("Active"), default=True) address = models.CharField(_("Address"), max_length=256, null=True, blank=True)
And I need testing CountryModelMixin models:
I create test:
class ModelMixinTestCase(TestCase): mixin= CountryModelMixin @classmethod def setUpClass(cls): if not cls.mixin: return if isinstance(cls.mixin, list): name = "" for mxn in cls.mixin: name += mxn.__name__ name = hashlib.md5(name.encode('UTF-8')).hexdigest() cls.model = ModelBase('__TestModel__' + name, tuple(cls.mixin), {'__module__': cls.mixin[0].__module__}) else: cls.model = ModelBase('__TestModel__' + cls.mixin.__name__, (cls.mixin,), {'__module__': cls.mixin.__module__} ) # Create the schema for our test model with connection.schema_editor() as schema_editor: schema_editor.create_model(cls.model) super(ModelMixinTestCase, cls).setUpClass() @classmethod def tearDownClass(cls): if not cls.mixin: return # Delete the schema for the test model with connection.schema_editor() as schema_editor: schema_editor.delete_model(cls.model) super(ModelMixinTestCase, cls).tearDownClass() def setUp(self): self.country = Country.objects.create(name="Test", code="EN") def test_go(self): myModelElement = self.model.objects.create() myModelElement.countries_admin.set([self.country.pk, ])
return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
AttributeError: 'TestModel35ecfa746aba30e3344f3534dd7552ac' object has no attribute '_prefetched_objects_cache'
Test return errors: Cannot resolve keyword "" into field.
And delete myModelElement.delete() - don't work
Test abstract models without ManyToManyField work goods.
Change History (3)
comment:1 by , 5 years ago
Description: | modified (diff) |
---|
comment:2 by , 5 years ago
Description: | modified (diff) |
---|
comment:3 by , 5 years ago
Component: | Uncategorized → Database layer (models, ORM) |
---|---|
Resolution: | → invalid |
Status: | new → closed |
Summary: | Errors model abstract testing → Errors model abstract testing. |
Note:
See TracTickets
for help on using tickets.
As far as I'm concerned this is not an issue in Django. IMO you should use
Model
instead ofBaseModel
, nevertheless please don't use Trac as a support channel.Closing per TicketClosingReasons/UseSupportChannels.