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
相关产品推荐
相关产品推荐

