我正在尝试使用 django Inspection db 创建一个数据库模型,它正在生成所有模型,但我收到错误。
我使用此命令为现有数据库生成数据库模型:
python manage.py inspectdb > models.py
它正在准确地生成模型,但在这样的领域:
create_uid = models.ForeignKey('self', models.DO_NOTHING,db_column='create_uid', blank=True, null=True)
write_uid = models.ForeignKey('self',models.DO_NOTHING, db_column='write_uid', blank=True, null=True)
我收到错误:
polls.ResUsers.create_uid: (fields.E304) Reverse accessor for 'ResUsers.create_uid' clashes with reverse accessor for 'ResUsers.write_uid'.
HINT: Add or change a related_name argument to the definition for 'ResUsers.create_uid' or 'ResUsers.write_uid'.
polls.ResUsers.write_uid: (fields.E304) Reverse accessor for 'ResUsers.write_uid' clashes with reverse accessor for 'ResUsers.create_uid'.
HINT: Add or change a related_name argument to the definition for 'ResUsers.write_uid' or 'ResUsers.create_uid'.
我正在添加这样的相关名称:
create_uid = models.ForeignKey('self', models.DO_NOTHING,related_name='create_uid',db_column='create_uid', blank=True, null=True)
我应该做什么才能使用生成的模型。我正在使用 postgres。
我正在更新我的问题,当我像这样使用它时,答案之一对我有用:
create_uid = models.ForeignKey(
'self',
models.DO_NOTHING,
db_column='create_uid',
related_name='created_items',
blank=True,
null=True
)
在另一个模型类中,当我使用如下代码时:
create_uid = models.ForeignKey(
'ResUsers',
models.DO_NOTHING,
db_column='create_uid',
related_name='created_items',
blank=True,
null=True
)
我收到错误:
polls.ResUsers.create_uid: (fields.E304) Reverse accessor for 'ResUsers.create_uid' clashes with reverse accessor for 'SurveyUserInput.create_uid'.
HINT: Add or change a related_name argument to the definition for 'ResUsers.create_uid' or 'SurveyUserInput.create_uid'.
最佳答案
related_name=…
[Django-doc]是反向关系的名称。因此,它意味着使用 create_uid
/write_uid
对象访问所有模型对象。这可能会导致 QuerySet
包含零个、一个或多个元素。
因此,同一模型的两个 ForeignKey
的 lated_name
不能相同,因为这会使模型不明确。由于您的 ForeignKey
引用了 'self'
模型,因此您甚至无法为它们指定已存在的字段名称。
因此,您可能想给这些关系起一个类似的名称:
class MyModel(models.Model):
create_uid = models.ForeignKey(
'self',
models.DO_NOTHING,
db_column='create_uid',
<b>related_name='created_items'</b>,
blank=True,
null=True
)
write_uid = models.ForeignKey(
'self',
models.DO_NOTHING,
db_column='write_uid',
<b>related_name='written_items'</b>,
blank=True,
null=True
)
关于Django 出现错误 : "Reverse accessor for" in Models,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59306885/