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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:55:20