django模型与另一个模型的两个字段

ale*_*123 1 python django model foreign-keys

我正在创建模型类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
Run Code Online (Sandbox Code Playgroud)

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

AttributeError:类型对象'用户'没有属性'email'

有什么办法吗?

Ane*_*pic 5

这里有两件事......首先是找出你想要这样做的原因.因为也许你不应该.

如果您只想从Car实例访问所有者的电子邮件地址,则无需将其作为Car模型中的字段添加,您可以执行以下操作:

my_car = Car.objects.get(owner=me)
my_email = my_car.owner.email
Run Code Online (Sandbox Code Playgroud)

这会执行两个单独的数据库查询,第一个获取Car和第二个User访问ForeignKey时获取拥有权.

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

my_car = Car.objects.select_related().get(owner=me)
my_email = my_car.owner.email
Run Code Online (Sandbox Code Playgroud)

现在它只有一个查询,Django知道在底层SQL中进行连接.

但是,假设您知道所有这些并且您仍然真的想要将所有者的电子邮件添加到Car模型中.这被称为"非规范化",并且可以有有效的性能原因.

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