Django获取错误:";“反向存取器”;在模型中
我正在尝试使用django inspect db创建一个db模型,它正在生成所有的模型,但我遇到了错误 我正在使用此命令为现有数据库生成db模型:Django获取错误:";“反向存取器”;在模型中,django,django-models,Django,Django Models,我正在尝试使用django inspect db创建一个db模型,它正在生成所有的模型,但我遇到了错误 我正在使用此命令为现有数据库生成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 = m
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)
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
)
为了使用生成的模型,我应该做什么。我正在使用postgres
我正在更新我的问题当我这样使用它时,其中一个答案对我有效:
create_uid = models.ForeignKey('self', models.DO_NOTHING,related_name='create_uid',db_column='create_uid', blank=True, null=True)
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
)
在另一个模型类中,当我使用以下代码时:
create_uid = models.ForeignKey('self', models.DO_NOTHING,related_name='create_uid',db_column='create_uid', blank=True, null=True)
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'.
是反向关系的名称。因此,它意味着使用对象的ascreate\u uid
/write\u uid
访问所有模型对象。这可能会导致一个由零个、一个或多个元素组成的QuerySet
因此,与同一模型相关的两个外键的名称
s不能相同,因为这会使模型模糊不清。由于您的ForeignKey
s引用的是'self'
模型,因此您甚至无法为这些模型指定已存在字段的名称
因此,您可能希望给这些关系起一个如下名称:
class MyModel(models.Model):
create_uid = models.ForeignKey(
'self',
models.DO_NOTHING,
db_column='create_uid',
related_name='created_items',
blank=True,
null=True
)
write_uid = models.ForeignKey(
'self',
models.DO_NOTHING,
db_column='write_uid',
related_name='written_items',
blank=True,
null=True
)
类MyModel(models.Model):
创建\u uid=models.ForeignKey(
“自我”,
什么都不做,
db_column='create_uid',
相关的_name='created_items',
空白=真,
空=真
)
write_uid=models.ForeignKey(
“自我”,
什么都不做,
db_column='write'u uid',
相关的\名称='书面\项目',
空白=真,
空=真
)
related\u name
是关系的反向名称,因此通常与关系的名称不同。由于您在这里引用了“self”
,通常它也不起作用。有许多类似的模型,如何使它起作用?它对我起作用,但当我在self不存在的地方使用相同的代码时,我会收到错误:“ResUsers.create\uid”的反向访问器与“SurveyUserInput.create\uid”的反向访问器冲突。Se更新了问题。@NilaySingh:是的,您需要创建其他相关的\u名称
,如前所述,相关名称是从目标模型到您定义它的模型之间的关系的名称,这些名称应该是唯一的。