在Django中更新含外键关联的price_table表数据
问题描述
我有两张通过外键关联的数据表,其中store_table模型已存在三条对应不同门店的记录。目前我尝试更新price_table模型,但不清楚如何利用外键,将price_table的条目关联到对应的store_table的ID。以下是我的两个模型代码及更新price_table的代码:
我的两个模型
class store_table(models.Model): store = models.CharField(max_length=100, null=True) number = models.BigIntegerField(null=True) class Meta: unique_together = ( ( "store", "number", ), ) class price_table(models.Model): price = models.CharField(max_length=100, null=True) dates = models.DateField(null=True, blank=True) store_id = models.ForeignKey( store_table, on_delete=models.CASCADE, default=None ) class Meta: unique_together = ( ( "dates", "price", ), )
我的price_table模型更新代码
update_models = price_table( dates=dates, price=price ) update_models.save()
解决方案
要将price_table条目关联到对应store_table记录,核心是先获取目标store_table实例,再赋值给外键字段,具体有两种常用方式:
1. 通过主键ID直接关联
若已知目标门店的store_table主键ID,可直接关联:
# 示例:目标门店ID为1 update_models = price_table( dates=dates, price=price, store_id_id=1 # 外键字段名后加_id,直接传入主键值 ) update_models.save()
也可以先获取实例再传入:
target_store = store_table.objects.get(id=1) update_models = price_table( dates=dates, price=price, store_id=target_store ) update_models.save()
2. 通过门店唯一标识获取实例
利用store_table中store和number的联合唯一约束,定位具体门店:
# 示例:匹配store为"XX门店"、number为12345的门店 target_store = store_table.objects.get(store="XX门店", number=12345) update_models = price_table( dates=dates, price=price, store_id=target_store ) update_models.save()
关键注意点
store_id外键字段未设置null=True,必须赋值才能成功保存,否则会抛出数据库完整性错误。- 使用
get()方法时,若目标记录不存在会触发DoesNotExist异常,建议根据业务场景添加异常处理(比如try-except块)。
内容的提问来源于stack exchange,提问作者barruntlek
相关产品推荐
相关产品推荐

