gpt4 book ai didi

django - 在 Django 中更新具有外键的表中的数据

转载 作者:行者123 更新时间:2023-12-05 04:21:12 25 4
gpt4 key购买 nike

我有两个表,其中一个通过外键连接到另一个。模型 store_table 已经包含三行,代表三个不同的商店。

我现在正在尝试更新模型price_table,但我不太确定我是否了解如何使用外键,以便它知道要更新哪个price_table 项目连接到哪个 store_table id。

关于如何实现这一点有什么建议吗?

我的两个模型

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()

最佳答案

有些事情让我感到困惑,但我认为这就是您想要的:

# NOTE: store is the store instance you want the price to be associated with
# For example, store = store_table.objects.get(pk=...)
# And you could iterate through every store object and CREATE the price
# for that store using the code below. Again, this does not UPDATE,
# this CREATES a new price_table object for that store_table object.

update_models = price_table(
store_id=store
dates=dates,
price=price
)
update_models.save()

为什么我很困惑?上面的代码将创建一个新的 price_table 对象,而不是更新它。如果您已经有一个要更新的 price_table 对象,即更改,那么它已经与商店相关联,在这种情况下您可以这样做:

# update_models here would be an object you FIND, not CREATE, for example,
# update_models = price_table.objects.get(pk=...)

update_models.dates = dates
update_models.price = price
update_models.save()

请记住,您不能更新模型,而是更新模型的实例。该模型只是一个模板,用于基于该模型创建实例或对象。您不更新模板,而是更新实例。现在,如果您的 price_table 的 INSTANCE 还没有与之关联的 sales_table(毕竟,store_id 的 default=None),那么您可以将上面的内容修改为:

# Again, here, update_models will be a price_table INSTANCE you find, and
# store would be the store_table object you find, i.e.
# store = store_table.objects.get(pk=...)
# where pk is the primary key of the store you want the price associated with

update_models.store_id = store
update_models.dates = dates
update_models.price = price
update_models.save()

还有一件事让我感到困惑。对于要使用Pascal大小写的类,即store_table不写Store,price_table写Price(毕竟都是表)。

这又是让我困惑的一点。价格应该是某种数字,对吗?那为什么要把它作为一个 CharField 呢?使用 DecimalField 不是更好吗?相反?

希望这对您有所帮助。

关于django - 在 Django 中更新具有外键的表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74295611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com