我正在尝试使用django inspect 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'.
答案 0 :(得分:2)
related_name=…
[Django-doc]是相反关系的名称。因此,这意味着使用a for a in dir(Son) if not a.startswith('__')]
/ create_uid
对象访问所有模型对象。这可能导致write_uid
为零,一个或多个元素。
因此,同一模型的两个QuerySet
中的related_name
可以不相同,因为那样会使模型变得模棱两可。由于您的ForeignKey
引用的是ForeignKey
模型,因此您甚至无法为它们指定已经存在的字段的名称。
因此,您可能想给关系起一个类似的名字:
'self'