Django 出现错误 : "Reverse accessor for" in Models

标签 django django-models

我正在尝试使用 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 包含零个、一个或多个元素。

因此,同一模型的两个 ForeignKeylated_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/

相关文章:

python - python中的模拟函数参数

python - 让 bootstrap-calendar 组件与 Django 一起使用

jquery - 如何使用 jQuery/AJAX 访问 views.py 中的变量?

python - Django + (django-model-utils) : Combining two models/inheriting from two models

django - UNIQUE 约束失败 : accounts_user. 用户名

Django 用户保存钩子(Hook)

python - Django 重复条目 1062

python - 将 Django 模型导入 python cli 脚本

django.contrib.auth.models.DoesNotExist : User matching query does not exist

将多个实例提交到数据库的表单的 Django 示例?