Django tests - fixture Запрос на совпадение пользователя не существует

Я пытаюсь запустить тест, который загружает прибор. Одна модель имеет GenericForeign ключ к ContentType и внешний ключ к auth.Users, Он связывает пользователей с контентом, который они создают. Я создал прибор с --natural ключ (как показано ниже) и может разрешить внешние ключи в имена.

python manage.py dumpdata mtm --natural --indent=4

При выполнении моих тестов я получаю следующую ошибку:

DeserializationError: Problem installing fixture 'fix.json': User matching query does not  exist.

Образец объекта базы данных, созданный dump.py:

{
"pk": 7, 
"model": "xx.vendor", 
"fields": {
    "phone_number": "777777777777777", 
    "alternative_phone_number": "", 
    "object_id": 1, 
    "contact_email": "", 
    "user": [
        "john"
    ], 
    "content_type": [
        "xx", 
        "axe"
    ], 
    "contact_person": "jimmy"
}
},

Полный возврат:

    Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/test/testcases.py", line 178, in __call__
    self._pre_setup()
  File "/usr/local/lib/python2.7/dist-packages/django/test/testcases.py", line 749, in _pre_setup
    self._fixture_setup()
  File "/usr/local/lib/python2.7/dist-packages/django/test/testcases.py", line 881, in _fixture_setup
    'skip_validation': True,
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 159, in call_command
    return klass.execute(*args, **defaults)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/loaddata.py", line 55, in handle
    self.loaddata(fixture_labels)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/loaddata.py", line 84, in loaddata
    self.load_label(fixture_label)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/loaddata.py", line 134, in load_label
    for obj in objects:
  File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/json.py", line 76, in Deserializer
    six.reraise(DeserializationError, DeserializationError(e), sys.exc_info()[2])
  File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/json.py", line 70, in Deserializer
    for obj in PythonDeserializer(objects, **options):
  File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/python.py", line 124, in Deserializer
    obj = field.rel.to._default_manager.db_manager(db).get_by_natural_key(*field_value)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/models.py", line 167, in get_by_natural_key
    return self.get(**{self.model.USERNAME_FIELD: username})
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 307, in get
    self.model._meta.object_name)

РЕДАКТИРОВАТЬ:

Я подтвердил, что все пользователи, на которые ссылается модель вендора, существуют в БД.

ОБНОВЛЕНИЕ 1:

Мой prpject использует ключ GenericForeign для ContentType и внешний ключ для auth.Users. Я сбросил данные, используя опцию --natural, но это привело к проблеме, описанной выше. Теперь я удалил опцию --natural и вместо этого сбросил данные для всех 3 приложений myApp, auth, contenttypes. Когда я запускаю тест, я получаю "Не удалось загрузить contenttypes.ContentType(pk=50): столбцы app_label, модель не уникальны". Я думаю, что это связано с динамическим созданием типов контента при импорте моделей. Какой способ обойти это?

1 ответ

Они могут существовать в "БД". Но существуют ли они в вашей тестовой базе данных? Когда вы запускаете тесты, Django создает тестовую базу данных. Таким образом, вам придется вывести пользователей из вашей базы данных и загрузить их как данные.

Светильники являются кошмаром для поддержания. Я советую вам использовать что-то вроде модельной мамы или фабричного мальчика для создания ваших приборов во время тестирования. Лично мне больше нравится модель мамочки API, но ваш вкус может отличаться.

Другие вопросы по тегам