Python错误:(fields.E304)字段的反向访问器与另一个字段的反向访问器冲突

时间:2019-11-10 12:04:43

标签: python django python-3.x django-models

下面是我在Django项目中的models.py文件。 每当我尝试运行项目时,都会出现以下错误。请协助,因为我刚刚开始接听django 我尝试根据错误提示更改外部列的名称,但无济于事。那里有很多答案表明,对我来说,不存在对related_name的更改。

控制台错误

  

app_fin.TblLockerCoutCin.jewel_item :(字段E304)反向访问器   'TblLockerCoutCin.jewel_item'与反向访问器冲突   'TblLockerCoutCin.jewel_item_code'。提示:添加或更改   定义的related_name参数   'TblLockerCoutCin.jewel_item'或'TblLockerCoutCin.jewel_item_code'。   app_fin.TblLockerCoutCin.jewel_item:(fields.E304)反向访问器   'TblLockerCoutCin.jewel_item'与反向访问器冲突   'TblLockerCoutCin.jewel_item_name'。提示:添加或更改   定义的related_name参数   “ TblLockerCoutCin.jewel_item”或“ TblLockerCoutCin.jewel_item_name”。   app_fin.TblLockerCoutCin.jewel_item_code:(fields.E304)反向   “ TblLockerCoutCin.jewel_item_code”的访问器与反向冲突   “ TblLockerCoutCin.jewel_item”的访问器。提示:添加或更改   定义的related_name参数   'TblLockerCoutCin.jewel_item_code'或'TblLockerCoutCin.jewel_item'。   app_fin.TblLockerCoutCin.jewel_item_code:(fields.E304)反向   “ TblLockerCoutCin.jewel_item_code”的访问器与反向冲突   “ TblLockerCoutCin.jewel_item_name”的访问器。提示:添加或更改   定义的related_name参数   'TblLockerCoutCin.jewel_item_code'或   'TblLockerCoutCin.jewel_item_name'。   app_fin.TblLockerCoutCin.jewel_item_name:(fields.E304)反向   “ TblLockerCoutCin.jewel_item_name”的访问器与反向冲突   “ TblLockerCoutCin.jewel_item”的访问器。提示:添加或更改   定义的related_name参数   “ TblLockerCoutCin.jewel_item_name”或“ TblLockerCoutCin.jewel_item”。   app_fin.TblLockerCoutCin.jewel_item_name:(fields.E304)反向   “ TblLockerCoutCin.jewel_item_name”的访问器与反向冲突   “ TblLockerCoutCin.jewel_item_code”的访问器。提示:添加或更改   定义的related_name参数   'TblLockerCoutCin.jewel_item_name'或   'TblLockerCoutCin.jewel_item_code'。

models.py

from collections import Counter
a = [1,1,2,2,3,3,3,3,4,4,4,4] 
result = dict(Counter(a)) # {1: 2, 2: 2, 3: 4, 4: 4}

for index, value in result.items():
    print(str(index) + " : " + str(value))

1 个答案:

答案 0 :(得分:2)

在您的TblLockerCoutCin模型中,jewel_item_codejewel_item_name字段都与TblJewelleryInventory模型(特别是pk)具有多对一关系领域)。因此,当TblJewelleryInventory的实例尝试遍历任何一个字段的反向关系时,在两种情况下都将尝试使用tbllockercoutcin_set -由于两个反向关系都是用相同的名称引用。

在这种情况下,您要使用related_name参数并为字段设置不同的访问者名称,例如:

jewel_item_code = models.ForeignKey(
    TblJewelleryInventory,
    on_delete=models.DO_NOTHING,
    related_name='jewel_item_code',  # Here
    db_column='jewel_item_code',
)
jewel_item_name = models.ForeignKey(
    TblJewelleryInventory,
    on_delete=models.DO_NOTHING,
    related_name='jewel_item_name',  # Here
    db_column='jewel_item_name',
)