python - Django同一个表的多个外键

标签 python django

我需要记录仓库中元素移动的交易。我有 3 个表,如下图所示。但是 Django 响应错误:

错误: chemstore.ItemTransaction:(models.E007)字段“outbin”的列名“bin_code_id”已被另一个字段使用。

它提示同一外键的多次使用。是我的表设计有问题吗?或者 Django 不允许这样做?我怎样才能在Django下实现这一点?谢谢你

DB design

[型号]

class BinLocation(models.Model):
    bin_code = models.CharField(max_length=10, unique=True)
    desc = models.CharField(max_length=50)

    def __str__(self):
        return f"{self.bin_code}"

    class Meta:
        indexes = [models.Index(fields=['bin_code'])]


class ItemMaster(models.Model):
    item_code = models.CharField(max_length=20, unique=True)
    desc = models.CharField(max_length=50)
    long_desc = models.CharField(max_length=150, blank=True)
    helper_qty = models.DecimalField(max_digits=10, decimal_places=4)
    unit = models.CharField(max_length=10, blank=False)

    def __str__(self):
        return f"{self.item_code}"

    class Meta:
        verbose_name = "Item"
        verbose_name_plural = "Items"
        indexes = [models.Index(fields=['item_code'])]


class ItemTransaction(models.Model):
    trace_code = models.CharField(max_length=20, unique=False)
    item_code = models.ForeignKey(
        ItemMaster, related_name='trans', on_delete=models.CASCADE, null=False)
    datetime = models.DateTimeField(auto_now=False, auto_now_add=False)
    qty = models.DecimalField(max_digits=10, decimal_places=4)
    unit = models.CharField(max_length=10, blank=False)
    action = models.CharField(
        max_length=1, choices=ACTION, blank=False, null=False)
    in_bin = models.ForeignKey(
        BinLocation, related_name='in_logs', db_column='bin_code_id', on_delete=models.CASCADE, null=False)
    out_bin = models.ForeignKey(
        BinLocation, related_name='out_logs', db_column='bin_code_id', on_delete=models.CASCADE, null=False)
    remarks = models.TextField(blank=True)

    def __str__(self):
        return f"{self.trace_code} {self.datetime} {self.item_code} {dict(ACTION)[self.action]} {self.qty} {self.unit} {self.in_bin} {self.out_bin}"

最佳答案

您在两个字段中有相同的db_column,因此请更改它

    in_bin = models.ForeignKey(
        BinLocation, related_name='in_logs', db_column='bin_code_id', on_delete=models.CASCADE, null=False)
    out_bin = models.ForeignKey(
        BinLocation, related_name='out_logs', db_column='other_bin_code', on_delete=models.CASCADE, null=False) /*change db_column whatever you want but it should be unique*/

关于python - Django同一个表的多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63297593/

相关文章:

python - 修复 Numpy 中的相位展开错误

python - 表单集中所需的第一个表单

python - Django、PIP 和 Virtualenv

python - ImportError:Mac 上没有名为 bs4 的模块

python - GStreamer:将延迟/间隙/移位引入音频

python 向变量添加额外值

python - 在 Windows 中使用 Django Sqlite

python - 对 'home' 进行反向操作,未找到参数 '()' 和关键字参数 '{}'。 0 个图案

Python3 Django -> HTML 到 PDF

Python:将字典转换为字节