#22421: Loading fixtures with OneToOne relation and natural keys fails since 1.7 Beta --------------------------------------+-------------------- Reporter: stanislas.guerra@… | Owner: nobody Type: Bug | Status: new Component: Core (Serialization) | Version: master Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 --------------------------------------+-------------------- Hi,
I am testing a project with the 1.7Beta release / master branch and Django can't load some fixtures when I am running my test-suite: {{{ ====================================================================== ERROR: test_validation_ajouter_double_page (fab4.front.tests.tests.DossierTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/test/testcases.py", line 175, in __call__ self._pre_setup() File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/test/testcases.py", line 747, in _pre_setup self._fixture_setup() File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/test/testcases.py", line 869, in _fixture_setup return super(TestCase, self)._fixture_setup() File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/test/testcases.py", line 788, in _fixture_setup **{'verbosity': 0, 'database': db_name, 'skip_checks': True}) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/management/__init__.py", line 167, in call_command return klass.execute(*args, **defaults) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/management/base.py", line 337, in execute output = self.handle(*args, **options) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/management/commands/loaddata.py", line 60, in handle self.loaddata(fixture_labels) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/management/commands/loaddata.py", line 89, in loaddata self.load_label(fixture_label) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/management/commands/loaddata.py", line 146, in load_label obj.save(using=self.using) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/core/serializers/base.py", line 176, in save setattr(self.object, accessor_name, object_list) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/db/models/fields/related.py", line 1183, in __set__ manager = self.__get__(instance) File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/db/models/fields/related.py", line 1169, in __get__ through=self.field.rel.through, File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site- packages/Django-1.8.dev20140410233300-py2.7.egg/django/db/models/fields/related.py", line 821, in __init__ (instance, source_field_name)) ValueError: Problem installing fixture '/Users/stan/Dropbox/Projets/Aden/Publish/repos/publish/fab4/fabrication/fixtures/tests/fabrication/fabrication2.json': "<Assistant: >" needs to have a value for field "user" before this many- to-many relationship can be used. }}} My models are : {{{ from django.contrib.sites.models import Site from django.contrib.auth.models import User class SupportManager(models.Manager): def get_current(self): return self.get(pk=settings.SITE_ID) def get_by_natural_key(self, short_name): return self.get(short_name=short_name) class Support(Site): short_name = models.CharField('nom court', max_length=10, unique=True) logo = models.ImageField('logo', upload_to='images/supports', blank=True) site_ptr = models.OneToOneField(Site, primary_key=True) # allow to do select related without an extra query to Site. objects = SupportManager() def __unicode__(self): return self.name def natural_key(self): return (self.short_name,) class Organisation(models.Model): name = models.CharField(max_length=100) short_name = models.CharField('nom court', max_length=16) class Employe(User): supports = models.ManyToManyField(Support) organisation = models.ForeignKey('Organisation', null=True, blank=True) filtre_organisation = models.BooleanField(default=False) telephone = models.CharField(u'téléphone', max_length=100, blank=True) class Meta: abstract = True def __unicode__(self): return self.get_full_name() class Assistant(Employe): class Meta: verbose_name = 'chargé de clientèle' }}} The fixture causing the crash is a concat from the following dumps (master version of dumpdata): {{{ python manage.py dumpdata sites.Site --indent=2 --natural-foreign --pk=1 python manage.py dumpdata parametrage.Support --indent=2 --natural-foreign --pk=1 python manage.py dumpdata auth.Group --indent=2 --natural-foreign --pk=2 python manage.py dumpdata auth.User --indent=2 --natural-foreign --pk=8 python manage.py dumpdata parametrage.Assistant --indent=2 --natural- foreign --pk=8 }}} Which is : {{{ [ { "fields": { "domain": "proprietesdefrance.com", "name": "Propri\u00e9t\u00e9s de France" }, "model": "sites.site", "pk": 1 }, { "fields": { "logo": "images/supports/logo_PDF.jpg", "short_name": "PDF" }, "model": "parametrage.support", "pk": 1 }, { "fields": { "name": "Relation Client", "permissions": [ [ "add_logentry", "admin", "logentry" ], [ "change_statut_refus_bat_to_service_fab", "fabrication", "changementstatut" ], [ "see_all_status", "fabrication", "changementstatut" ], [ "see_chemindefer", "fabrication", "chemindefer" ], [ "add_dossier", "fabrication", "dossier" ], [ "change_dossier", "fabrication", "dossier" ], [ "change_prix_dossier", "fabrication", "dossier" ], [ "see_bat_pdf_dossier", "fabrication", "dossier" ], [ "change_logoconstructeur", "saisie", "logoconstructeur" ], [ "delete_logoconstructeur", "saisie", "logoconstructeur" ] ] }, "model": "auth.group", "pk": 2 }, { "fields": { "username": "igixxxxx", "first_name": "Isxxxxx", "last_name": "Gxxxxxx", "is_active": true, "is_superuser": false, "is_staff": true, "last_login": "2014-04-04T10:34:28", "groups": [ [ "Relation Client" ] ], "user_permissions": [], "password": "sha1$17783$7152b7f25xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "email": "igibxx...@xxxxxxxxx.fr", "date_joined": "2009-10-07T16:08:28" }, "model": "auth.user", "pk": 8 }, { "fields": { "organisation": 1, "telephone": "01 xx xx xx xx", "groups": [ [ "Relation Client" ] ], "user_permissions": [], "filtre_organisation": false, "supports": [ [ "PDF" ] ] }, "model": "parametrage.assistant", "pk": 8 } ] }}} Any idea ? Thanks. -- Ticket URL: <https://code.djangoproject.com/ticket/22421> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/069.4874bc04ec11d0887f89395cbf08d0f1%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.