#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.

Reply via email to