有些东西让我对模型感到震惊,我猜一般是SQL表。
让我们假设你有这些模型:
class Manufacturer(models.Model):
name = models.CharField()
company_created = models.CharField()
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
当您创建Car的实例时,请说明以下
civic = Car(manufacturer='honda')
几个问题:
提前非常感谢。我非常感谢一个彻底的答案,所以我可以完全理解模型和关系。是的,我已经阅读了文档。
答案 0 :(得分:1)
首先,要记住的是这些类是底层数据库表的表示。 Django模型中的ForeignKey字段表示数据库中的一对多关系,其中_id字段表示另一个表的ID。这些表本身是独立的,但是通过FK字段(以及相关的索引约束,如果数据库支持它们)链接。
也就是说,在您的Car模型manufacturer
中是必填字段(因为您还没有将其定义为null=True
)。因此,当您创建Car时,必须将其指向已存在的制造商 - 并且该制造商必须已经保存,以便Django可以使用ID填充基础manufacturer_id
字段相关对象
因为Django知道两个对象之间的外键关系,所以在查询时可以使用它们。在SQL中,这将通过JOIN来完成:Django为您提供了一种特殊的语法,可以通过双下划线跨这些连接进行查询。因此,例如,如果你想获得1990年创建的制造商制造的所有汽车(假设你的company_created
字段是什么意思),你会这样做:
Car.objects.filter(manufacturer__company_created='1990')
Django将其翻译成":
SELECT * from car JOIN manufacturer ON car.manufacturer_id=manufacturer.id WHERE manufacturer.company_created='1990';
如果您已经拥有" civic"实例,只是想访问相关数据,这是纯Python对象访问:civic.manufacturer
是相关的制造商对象,因此您只需执行civic.manufacturer.company_created
即可获取相关数据。同样,Django将其转换为数据库访问,但从您的角度来看,这是简单的对象组合。
请注意,本教程中完全解释了这一切,Poll和Choice之间的关系与您的制造商和汽车模型完全匹配。
答案 1 :(得分:0)
是manufacturer
需要作为实例存在。
您可以像这样创建car
个实例:
manuf= Manufacturer(name='honda',company_created='Benz')
manuf.save()
civic = Car(manufacturer=manuf)
您可以通过以下方式从公民实例获取company_created
数据:
civic.manufacturer.company_created