Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug with inherited models #129

Open
Stranger6667 opened this issue Aug 13, 2015 · 0 comments
Open

Bug with inherited models #129

Stranger6667 opened this issue Aug 13, 2015 · 0 comments

Comments

@Stranger6667
Copy link

Hello!
I have following setup (based on django-hstore test setup):

class HStoreModel(models.Model):
    objects = hstore.HStoreManager()

    class Meta:
        abstract = True


class SerializedDataBag(HStoreModel):
    name = models.CharField(max_length=32)
    data = hstore.SerializedDictionaryField()


class InheritedSerializedDataBag(SerializedDataBag):
    extra_data = models.CharField(max_length=32)

I've tried to create & modify some data but get this:

>>> instance = InheritedSerializedDataBag.objects.create(extra_data='Test')
>>> instance.data = {'foo': 'bar'}
>>> instance.save()
>>> InheritedSerializedDataBag.objects.all()

Traceback (most recent call last):
  File "/Users/dmitrijdygalo/repos/django-hstore/tests/django_hstore_tests/tests/test_serialized_dictionary_field.py", line 469, in test_inherited_model
    instance = InheritedSerializedDataBag.objects.get(id=instance.id)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/manager.py", line 92, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 351, in get
    num = len(clone)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 122, in __len__
    self._fetch_all()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 966, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 275, in iterator
    obj = model(*row_data)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/base.py", line 382, in __init__
    setattr(self, field.attname, val)
  File "/Users/dmitrijdygalo/repos/django-hstore/django_hstore/descriptors.py", line 35, in __set__
    if value and self.field._from_db(obj):
  File "/Users/dmitrijdygalo/repos/django-hstore/django_hstore/fields.py", line 264, in _from_db
    return bool(model_instance._state.adding and model_instance.pk)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/base.py", line 509, in _get_pk_val
    return getattr(self, meta.pk.attname)
AttributeError: 'InheritedSerializedDataBag' object has no attribute 'serializeddatabag_ptr_id'

However in database data is not corrupted. Pointer to base table is OK, and data is also OK.
I use postgresql 9.4.1 and Django 1.7.9 during tests.
Here is test case for that. I'll try to find out why it happens, but I'm pretty new to codebase, so if anyone can help to fix this bug, it will be great :)

Cheers!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant