简体   繁体   中英

django test fail to build foreign key relationship with hidden related_name

I have two models:

class Model1(BaseModel):
    hidden = models.ForeignKey(
        Model2, 
        default=10,
        related_name='+',
    )

class Model2(models.Model):
    # model content

so the issue is, when using django test, the test database cannot create the relationship between Model1 and Model2 , I suspect it's because of the field related_name='+' . Not sure what is the work around for this without changing the related_name .

the fail info is

  File "/app/src/save.py", line 317, in save_app
    model1.object.save()
  File "/app/venv/lib/python3.7/site-packages/django/db/models/base.py", line 740, in save
    force_update=force_update, update_fields=update_fields)
  File "/app/venv/lib/python3.7/site-packages/django/db/models/base.py", line 778, in save_base
    force_update, using, update_fields,
  File "/app/venv/lib/python3.7/site-packages/django/db/models/base.py", line 881, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "/app/venv/lib/python3.7/site-packages/django/db/models/base.py", line 921, in _do_insert
    using=using, raw=raw,
  File "/app/venv/lib/python3.7/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/app/venv/lib/python3.7/site-packages/django/db/models/query.py", line 1270, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/app/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
    cursor.execute(sql, params)
  File "/app/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/app/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/app/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/app/venv/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/app/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)

django.db.utils.IntegrityError: insert or update on table "Model1" violates foreign key constraint "Model1_hidden_1ba57f04_fk_Model2"
DETAIL:  Key (Model1_hidden_id)=(10) is not present in table "Model2".

problem solved by pre-populate the testing database by using the fixture option. related_name="+" is not the real issue. real issue is the database needs to be populated before the test.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM