You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django更新关联模型实例时表单显示ID而非名称问题求助

问题解决:Django Stock表单关联字段显示ID而非名称

核心原因是关联的Warehouse和Product模型未定义__str__方法,Django渲染外键字段时默认调用关联模型的__str__返回值,若未定义则只能显示对象ID。

解决方案

1. 为Warehouse模型添加__str__方法

找到Warehouse模型所在的models.py文件,添加如下代码(假设Warehouse有name字段存储仓库名称):

class Warehouse(models.Model):
    name = models.CharField(max_length=100)
    # 其他字段...

    def __str__(self):
        return self.name  # 返回仓库名称

2. 为Product模型添加__str__方法

找到products应用下的models.py文件,添加如下代码(假设Product有name字段存储产品名称):

class Product(models.Model):
    name = models.CharField(max_length=200)
    # 其他字段...

    def __str__(self):
        return self.name  # 返回产品名称

3. 可选:优化Stock模型字段命名

Stock模型的外键命名不符合Django规范,容易造成混淆,建议修改:

class Stock(models.Model):
    class Meta:
        verbose_name_plural = "Stocks"

    warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)  # 原name改为warehouse
    product = models.ForeignKey('products.Product', on_delete=models.CASCADE)  # 原product_id改为product
    quantity = models.IntegerField(default=0)
    product_price = models.DecimalField(max_digits=19, decimal_places=2, default=0 ,validators=[MinValueValidator(0)])

    def get_absolute_url(self):
        return reverse("stock-update", args=[self.pk])

    def __str__(self):
        return f"{self.product} {self.quantity} {self.product_price}"

修改后重启服务,表单中的外键字段就会显示对应的仓库和产品名称,无需修改现有表单模板逻辑。

内容的提问来源于stack exchange,提问作者belmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:20:41