gpt4 book ai didi

python - 具有来自另一个模型的两个字段的django模型

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:38 24 4
gpt4 key购买 nike

我正在创建模型类 Car,我想在其中包含对一个外键的两个引用。

class Car(models.Model):
owner = models.ForeignKey(User)
#and here I want to have owner email (which is already set in class User)
email = owner.email

但我不知道如何引用已使用的 ForeignKey 字段。我收到此错误:

AttributeError: type object 'User' has no attribute 'email'

有什么办法吗?

最佳答案

这里有两件事...第一是找出你为什么要这样做。因为也许你不应该。

如果您只想从 Car 实例访问所有者的电子邮件地址,则不需要将其添加为 Car 模型的字段,您可以这样做:

my_car = Car.objects.get(owner=me)
my_email = my_car.owner.email

这会执行两个单独的数据库查询,第一个是获取 Car,第二个是在您访问 ForeignKey 时获取所属的 User

如果你想避免这种情况,你可以使用 select_related :

my_car = Car.objects.select_related().get(owner=me)
my_email = my_car.owner.email

现在只有一个查询,Django 知道在底层 SQL 中做一个连接。

但是,假设您知道所有这些并且您仍然真的想将车主的电子邮件添加到 Car 模型中。这叫做 'denormalisation'并且这样做可能有正当的性能原因。

出现的一个问题是如何使电子邮件地址在 UserCar 模型之间保持同步。如果您有意在 Django 应用程序中追求非规范化,我强烈建议您考虑使用 django-denorm .它在 SQL 数据库中安装触发器,并提供一个很好的接口(interface)来指定模型上的非规范化字段。

关于python - 具有来自另一个模型的两个字段的django模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133635/

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