Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django models django中字段关系的工作原理_Django Models - Fatal编程技术网

Django models django中字段关系的工作原理

Django models django中字段关系的工作原理,django-models,Django Models,我为了在django的房地产市场转转,一直在摇头 我在互联网上搜寻关于django关系的解释。 我是django的新手,熟悉SQL,我知道SQL的工作原理,但我对django的工作一无所知 我在stackoverflow上搜索,几乎没有对我没有帮助的答案,因此我不得不要求更多的解释。 由于django中的记录是对象,那么django模型中的外键属性包含什么?它是否包含对目标模型的引用(在SQL中,它包含引用关系记录的PK)。什么是“反向关系和所有这些东西” django的工作原理是什么??。dj

我为了在django的房地产市场转转,一直在摇头

我在互联网上搜寻关于django关系的解释。 我是django的新手,熟悉SQL,我知道SQL的工作原理,但我对django的工作一无所知

我在stackoverflow上搜索,几乎没有对我没有帮助的答案,因此我不得不要求更多的解释。 由于django中的记录是对象,那么django模型中的外键属性包含什么?它是否包含对目标模型的引用(在SQL中,它包含引用关系记录的PK)。什么是“反向关系和所有这些东西”

django的工作原理是什么??。django的方法是什么。请给我一些好的表达。我恳请!
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"
如果你真的想探究细节的话,别忘了这本书随时可以阅读