簡體   English   中英

Python 錯誤:(fields.E304)字段的反向訪問器與另一個字段的反向訪問器沖突

[英]Python Error : (fields.E304) Reverse accessor for field clashes with reverse accessor for another field

下面是我在 Django 項目中的 models.py 文件。 每當我嘗試運行該項目時,都會出現以下錯誤。 請協助,因為我剛剛開始使用 django 我嘗試按照錯誤提示更改外部列的名稱,但無濟於事。 那里的很多答案都建議對我的案例中不存在的相關名稱進行更改。

來自控制台的錯誤

app_fin.TblLockerCoutCin.jewel_item:(fields.E304)“TblLockerCoutCin.jewel_item”的反向訪問器與“TblLockerCoutCin.jewel_item_code”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item”或“TblLockerCoutCin.jewel_item_code”的定義中添加或更改related_name 參數。 app_fin.TblLockerCoutCin.jewel_item:(fields.E304)“TblLockerCoutCin.jewel_item”的反向訪問器與“TblLockerCoutCin.jewel_item_name”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item”或“TblLockerCoutCin.jewel_item_name”的定義中添加或更改related_name 參數。 app_fin.TblLockerCoutCin.jewel_item_code:(fields.E304)“TblLockerCoutCin.jewel_item_code”的反向訪問器與“TblLockerCoutCin.jewel_item”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item_code”或“TblLockerCoutCin.jewel_item”的定義中添加或更改related_name 參數。 app_fin.TblLockerCoutCin.jewel_item_code:(fields.E304)“TblLockerCoutCin.jewel_item_code”的反向訪問器與“TblLockerCoutCin.jewel_item_name”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item_code”或“TblLockerCoutCin.jewel_item_name”的定義中添加或更改相關名稱參數。 app_fin.TblLockerCoutCin.jewel_item_name:(fields.E304)“TblLockerCoutCin.jewel_item_name”的反向訪問器與“TblLockerCoutCin.jewel_item”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item_name”或“TblLockerCoutCin.jewel_item”的定義中添加或更改related_name 參數。 app_fin.TblLockerCoutCin.jewel_item_name:(fields.E304)“TblLockerCoutCin.jewel_item_name”的反向訪問器與“TblLockerCoutCin.jewel_item_code”的反向訪問器沖突。 提示:在“TblLockerCoutCin.jewel_item_name”或“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'

在您的TblLockerCoutCin model 中, jewel_item_codejewel_item_name字段都與TblJewelleryInventory model(特別是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',
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM