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

2024-09-30 04:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的模型.pyDjango项目中的文件。 每当我尝试运行这个项目时,都会出现以下错误。请帮忙,因为我刚开始接django 我尝试按照错误的建议更改外来列的名称,但没有成功。很多答案都建议对我的案例中不存在的相关_名称进行更改。在

控制台出错

app_fin.TblLockerCoutCin.jewel_item: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item_code'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item' or 'TblLockerCoutCin.jewel_item_code'. app_fin.TblLockerCoutCin.jewel_item: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item_name'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item' or 'TblLockerCoutCin.jewel_item_name'. app_fin.TblLockerCoutCin.jewel_item_code: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item_code' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item_code' or 'TblLockerCoutCin.jewel_item'. app_fin.TblLockerCoutCin.jewel_item_code: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item_code' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item_name'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item_code' or 'TblLockerCoutCin.jewel_item_name'. app_fin.TblLockerCoutCin.jewel_item_name: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item_name' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item_name' or 'TblLockerCoutCin.jewel_item'. app_fin.TblLockerCoutCin.jewel_item_name: (fields.E304) Reverse accessor for 'TblLockerCoutCin.jewel_item_name' clashes with reverse accessor for 'TblLockerCoutCin.jewel_item_code'. HINT: Add or change a related_name argument to the definition for 'TblLockerCoutCin.jewel_item_name' or 'TblLockerCoutCin.jewel_item_code'.

在模型.py在

from django.db import models


class TblJewelleryInventory(models.Model):
    id = models.IntegerField(primary_key=True)
    item_code = models.CharField(unique=True, max_length=5, blank=True, null=True)
    item_name = models.CharField(max_length=250, blank=True, null=True)
    base_locker_location = models.CharField(max_length=45, blank=True, null=True)
    updated_at = models.DateTimeField()
    created_at = models.DateTimeField()

    def __str__(self):
        return self.name

    class Meta:
        managed = False
        db_table = 'tbl_jewellery_inventory'


class TblJewelleryInventoryLogs(models.Model):
    id = models.IntegerField(primary_key=True)
    item_id = models.IntegerField()
    item_code = models.CharField(unique=True, max_length=5, blank=True, null=True)
    item_name = models.CharField(max_length=250, blank=True, null=True)
    base_locker_location = models.CharField(max_length=45, blank=True, null=True)
    updated_at = models.DateTimeField()
    created_at = models.DateTimeField()
    triggered_at = models.DateTimeField()

    def __str__(self):
        return self.name

    class Meta:
        managed = False
        db_table = 'tbl_jewellery_inventory_logs'


class TblLockerCoutCin(models.Model):
    jewel_item = models.ForeignKey(TblJewelleryInventory, models.DO_NOTHING)
    jewel_item_code = models.ForeignKey(TblJewelleryInventory, models.DO_NOTHING, db_column='jewel_item_code')
    jewel_item_name = models.ForeignKey(TblJewelleryInventory, models.DO_NOTHING, db_column='jewel_item_name')
    reason = models.CharField(max_length=500, blank=True, null=True)
    is_check_out = models.IntegerField(blank=True, null=True)
    is_check_in = models.IntegerField(blank=True, null=True)
    created_at = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        return self.name
    class Meta:
        managed = False
        db_table = 'tbl_locker_cout_cin'

Tags: ornametrueformodelscodeitemnull
1条回答
网友
1楼 · 发布于 2024-09-30 04:32:43

在您的TblLockerCoutCin模型中,jewel_item_code和{}字段都与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',
)

相关问题 更多 >

    热门问题