Django models django中字段关系的工作原理
我为了在django的房地产市场转转,一直在摇头 我在互联网上搜寻关于django关系的解释。 我是django的新手,熟悉SQL,我知道SQL的工作原理,但我对django的工作一无所知 我在stackoverflow上搜索,几乎没有对我没有帮助的答案,因此我不得不要求更多的解释。 由于django中的记录是对象,那么django模型中的外键属性包含什么?它是否包含对目标模型的引用(在SQL中,它包含引用关系记录的PK)。什么是“反向关系和所有这些东西” django的工作原理是什么??。django的方法是什么。请给我一些好的表达。我恳请!Django models django中字段关系的工作原理,django-models,Django Models,我为了在django的房地产市场转转,一直在摇头 我在互联网上搜寻关于django关系的解释。 我是django的新手,熟悉SQL,我知道SQL的工作原理,但我对django的工作一无所知 我在stackoverflow上搜索,几乎没有对我没有帮助的答案,因此我不得不要求更多的解释。 由于django中的记录是对象,那么django模型中的外键属性包含什么?它是否包含对目标模型的引用(在SQL中,它包含引用关系记录的PK)。什么是“反向关系和所有这些东西” django的工作原理是什么??。dj
django与SQL在这方面有什么不同?为什么不亲自看看呢 例如,在employees/models.py中:
class Manager(models.Model):
name = models.CharField("name", max_length=40)
def __unicode__(self):
return self.name
class Employee(models.Model):
manager = models.ForeignKey(Manager)
name = models.CharField("name", max_length=40)
def __unicode__(self):
return self.name
然后,您可以通过运行以下命令查看此模型将生成的SQL:
$ ./manage.py makemigrations employees
Migrations for 'employees':
0001_initial.py:
- Create model Employee
- Create model Manager
- Add field manager to employee
$ ./manage.py sqlmigrate employees 0001_initial
BEGIN;
CREATE TABLE "employees_employee" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(40) NOT NULL);
CREATE TABLE "employees_manager" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(40) NOT NULL);
CREATE TABLE "employees_employee__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(40) NOT NULL, "manager_id" integer NOT NULL REFERENCES "employees_manager" ("id"));
INSERT INTO "employees_employee__new" ("manager_id", "id", "name") SELECT NULL, "id", "name" FROM "employees_employee";
DROP TABLE "employees_employee";
ALTER TABLE "employees_employee__new" RENAME TO "employees_employee";
CREATE INDEX "employees_employee_8784215c" ON "employees_employee" ("manager_id");
此外,如果您想知道特定查询如何工作,一个有用的工具是“query”属性:
>>> print(Employee.objects.all().query)
SELECT "employees_employee"."id", "employees_employee"."manager_id", "employees_employee"."name" FROM "employees_employee"
如果你真的想探究细节的话,别忘了这本书随时可以阅读