Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
django的设计模式_django前后端数据交互,希望能够帮助你!!!。
设计数据库是构建 Web 应用程序最重要的部分之一。如果你使用的是关系数据库,则必须维护表之间的正确关系。
Django应用程序中的每个模型代表一个数据库表。默认情况下,Django 模型在关系数据库管理系统 (RDBMS) 上运行。所以你需要设计你的 Django 模型来维护它们之间的正确关系。
在本篇文章中,我们将了解如何在一般情况下创建数据库表之间的关系。然后我们将看到如何在 Django 模型中实现这些关系。让我们开始吧!
在关系数据库系统中,存在三种类型的关系:
Django 模型支持这三种类型的关系。让我们首先通过示例来了解每个关系。然后我们将看到如何在 Django 模型中应用它们。
一对一关系意味着一个表的一个记录与另一个表的一个记录完全相关。
一对一关系的真实示例可以是一个国家及其首都。每个国家只有一个首都。而每个首都都只是一个国家的首都。这种关系可以用下图表示:
现在让我们看看如何将其转换为 Django 模型。要在 Django 中建立一对一关系,使用关键字OneToOneField。
from django.db import models # The model Country class Country(models.Model): name = models.CharField(max_length=50) def __str__(self): return str(self.name) # The model Capital class Capital(models.Model): country = models.OneToOneField( Country, on_delete=models.CASCADE, primary_key=True, ) name = models.CharField(max_length=50) def __str__(self): return str(self.name)
Country这就是在两个模型和之间创建一对一关系的方式Capital。
让我们看另一个例子:
Django 身份验证有一个默认模型User。假设你正在构建一个电子商务平台并希望将你的Customer模型从User. 你将执行以下操作:
from django.db import models from django.contrib.auth.models import User class Customer(models.Model): user = models.OneToOneField( User, on_delete=models.CASCADE, null=True, blank=True ) name = models.CharField(max_length=256, null=True) email = models.EmailField(max_length=256, null=True) def __str__(self): return str(self.name)
此处也可以将一个用户添加为客户。一个用户不能是多个客户。
“在一对多关系中,一个表的一个记录可以与另一个表的一个或多个记录相关联。”
我们可以再次回到国家的例子。考虑一个国家与其城市之间的关系。一个国家有多个城市。另一方面,每个城市都只属于一个国家。所以它是一个国家和它的城市之间的一对多关系。我们可以用下图来表示这种关系:
我们可以这样理解这个图:一个国家可以有很多个城市,每个城市只属于一个国家。
要在 Django 模型中定义一对多关系,我们需要使用关键字ForeignKey.
from django.db import models class Country(models.Model): name = models.CharField(max_length=100) def __str__(self): return str(self.name) class City(models.Model): country = models.ForeignKey( Country, on_delete=models.CASCADE ) name = models.CharField(max_length=100) def __str__(self): return str(self.name)
在这种一对多的关系中,Country是父母,City是孩子。
现在让我们回到我们的电子商务示例。User我们在模型和模型之间创建了一对一的关系Customer。客户将在电子商务平台上下订单。Order模型和模型之间会有什么关系Customer?一个客户可以下很多订单,但一个订单只会与一个客户相关联。Customer这在和之间创建了一对多关系Order。
from django.db import models from django.contrib.auth.models import User class Customer(models.Model): user = models.OneToOneField( User, on_delete=models.CASCADE, null=True, blank=True ) name = models.CharField(max_length=256, null=True) email = models.EmailField(max_length=256, null=True) def __str__(self): return str(self.name) class Order(models.Model): customer = models.ForeignKey( Customer, on_delete=models.SET_NULL, null=True, blank=True ) date_ordered = models.DateTimeField(auto_now_add=True) complete = models.BooleanField(default=False, null=True, blank=False) transaction_id = models.CharField(max_length=256, null=True) def __str__(self): return str(self.id)
“在多对多关系中,一个表中的多个记录可以与另一个表中的多个记录相关联。”
让我们考虑学校数据库中教师和学科之间的关系。一位老师可以教授一门或多门科目。而且一门学科可以由一位或多位老师教授。这在教师和科目之间创建了多对多的关系。我们可以使用下图表示关系:
要在 Django 模型中定义多对多关系,我们需要使用关键字ManyToManyField.
from django.db import models class Teacher(models.Model): first_name = models.CharField(max_length=250) last_name = models.CharField(max_length=250) email = models.EmailField(max_length=250) def __str__(self): return str(self.first_name) class Subject(models.Model): teachers = models.ManyToManyField(Teacher) title = models.CharField(max_length=250) def __str__(self): return str(self.title)
需要注意的一件事是我们也可以ManyToManyField在Teacher模型中使用。在那种情况下,我们需要把Subject类放在第一位。
from django.db import models class Subject(models.Model): title = models.CharField(max_length=250) def __str__(self): return str(self.title) class Teacher(models.Model): subjects = models.ManyToManyField(Subject) first_name = models.CharField(max_length=250) last_name = models.CharField(max_length=250) email = models.EmailField(max_length=250) def __str__(self): return str(self.first_name)
由于它是多对多关系,因此无论哪种方式都可以。
多对多关系的另一个示例可以是博客网站中博客文章和标签之间的关系。一篇博文可以共享多个标签,一个标签可以在多篇博文之间共享。
考虑这篇关于 Django 的文章。它可能有多个标签:Programming、web development、Django、Python 等。另一篇也与 Python 和 Django 相关的不同文章可能有类似的标签。所以这是一个多对多的关系。
from django.db import models class Post(models.Model): title = models.CharField(max_length=450) subtitle = models.CharField(max_length=750) body = models.TextField() date_created = models.DateTimeField(auto_now_add=True) def __str__(self): return str(self.title) class Tag(models.Model): posts = models.ManyToManyField(Post) name = models.CharField(max_length=450) def __str__(self): return str(self.name)
设计数据库是 Web 应用程序构建过程的重要组成部分。这是你在计划构建 Web 应用程序时应该做的第一件事,无论你使用的是什么堆栈。
在本文中,我描述了如何在 Django 应用程序中创建模型之间的关系。如果你在 Django 应用程序中使用关系数据库设计,则必须维护模型之间的正确关系。
我希望从本文中你对数据库关系的工作原理有一个清晰的了解。以及如何在 Django 模型中应用它们。谢谢阅读。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。