2015-12-18 2 views
1

При запуске некоторых модульных тестов я получаю ошибку DeserializationError. В других тестовых классах в одном файле правильное использование одного и того же прибора. Я озадачен и хотел бы знать, что я делаю неправильно.DeserializationError: [...] Запрос соответствия разрешений не существует

Вот код:

class CreateViewTest(TransactionTestCase): 

    fixtures = ['data.yaml'] 

    def test_create_post_passed(self): 
     current = len(Timesheet.objects.all()) 
     data = {'start': datetime.date.today(), } 
     response = self.client.post('/timetracker/create/', data) 
     self.assertEqual(response.status_code, 200, response) 
     self.assertEqual(current + 1, len(Timesheet.objects.all())) 

А вот выход запуска модульных тестов:

====================================================================== 
ERROR: test_create_post_passed (timetracker.tests.CreateViewTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/test/testcases.py", line 182, in __call__ 
    self._pre_setup() 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/test/testcases.py", line 787, in _pre_setup 
    self._fixture_setup() 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/test/testcases.py", line 840, in _fixture_setup 
    **{'verbosity': 0, 'database': db_name}) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command 
    return command.execute(*args, **defaults) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute 
    output = self.handle(*args, **options) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 60, in handle 
    self.loaddata(fixture_labels) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 90, in loaddata 
    self.load_label(fixture_label) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/management/commands/loaddata.py", line 141, in load_label 
    for obj in objects: 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/serializers/pyyaml.py", line 79, in Deserializer 
    six.reraise(DeserializationError, DeserializationError(e), sys.exc_info()[2]) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/serializers/pyyaml.py", line 73, in Deserializer 
    for obj in PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options): 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/serializers/python.py", line 132, in Deserializer 
    m2m_data[field.name] = [m2m_convert(pk) for pk in field_value] 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/core/serializers/python.py", line 127, in m2m_convert 
    return field.rel.to._default_manager.db_manager(db).get_by_natural_key(*value).pk 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/contrib/auth/models.py", line 36, in get_by_natural_key 
    content_type=ContentType.objects.db_manager(self.db).get_by_natural_key(app_label, model), 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/home/usr/Envs/intranet/lib/python2.7/site-packages/django/db/models/query.py", line 334, in get 
    self.model._meta.object_name 
DeserializationError: Problem installing fixture '/home/usr/repos/intranet/intranet_site/timetracker/fixtures/users.yaml': Permission matching query does not exist. 
+0

Помните, если вам удалось это решить? Если да, то как? – guival

+0

@guival Нет исправления. Я переработал код. Взял возраст ... – Sardathrion

ответ

1

У меня такая же проблема, после сброса таблицы разрешений AUTH. После удаления некоторых разрешений проблема исчезла. Вот список разрешений, которые были удалены:

- fields: 
    codename: add_site 
    content_type: [sites, site] 
    name: Can add site 
    model: auth.permission 
- fields: 
    codename: change_site 
    content_type: [sites, site] 
    name: Can change site 
    model: auth.permission 
- fields: 
    codename: delete_site 
    content_type: [sites, site] 
    name: Can delete site 
    model: auth.permission 
- fields: 
    codename: add_migrationhistory 
    content_type: [south, migrationhistory] 
    name: Can add migration history 
    model: auth.permission 
- fields: 
    codename: change_migrationhistory 
    content_type: [south, migrationhistory] 
    name: Can change migration history 
    model: auth.permission 
- fields: 
    codename: delete_migrationhistory 
    content_type: [south, migrationhistory] 
    name: Can delete migration history 
    model: auth.permission 

Оказалось, что sites и south приложения не были установлены в моем проекте, поэтому все эти разрешения были связаны с не существующими приложениями. Эти приложения были установлены ранее и были удалены после обновления Django. Но разрешения, сохраненные в базе данных, остались нетронутыми