在ORM操作处了解的文章中,我们已经初步接触到了主键与外键的字段定义,那么本文以详细介绍主键外键的使用方法等
1.外键
在Django中,外键是一种关系字段,用于建立不同模型之间的关联关系。外键字段允许一个模型引用另一个模型的主键,从而创建模型之间的关系。
使用外键可以实现数据库之间的关联,例如一个博客文章可以有多个评论,每个评论又关联到一个特定的博客文章。在这种情况下,可以在评论模型中使用外键字段来引用博客文章模型的主键。
在Django中,定义外键字段非常简单。只需在模型中的字段中使用ForeignKey类,并指定关联的模型作为参数。例如:
class Personnel(models.Model):
id = models.AutoField(verbose_name="工号", primary_key=True, db_index=True)
name = models.CharField(verbose_name="姓名", max_length=16, null=False)
age = models.PositiveIntegerField(verbose_name="年龄", default=1)
class Contact(models.Model):
con_id = models.AutoField(verbose_name="联系表序号", primary_key=True)
phone = models.CharField(verbose_name="手机号码", max_length=16, null=False)
address = models.TextField(verbose_name="住址", default='宿舍')
work_id = models.ForeignKey(to="Personnel", on_delete=models.SET_NULL, null=True)
那么在以上代码中有两个模型,分别是Personnel模型和Contact模型,其中Personnel模型中设定了id这个字段为主键,Contact模型设定了con_id这个字段为主键,work_id为外键,让我们细看work_id这个字段的定义:
- to:需要传递被外键连接的主表模型作为值,如果连接时主表模型还没定义,建议使用主表模型类名加上"",这样就不会报错。
- on_delete:需要传递当主表中的一条数据删除时,从表中与这条数据相关联的数据要执行怎样的动作。
- to_field:允许你指定要引用的目标模型中的特定字段作为外键
to和on_delete这两个参数不可避免,但to_field参数不指定,一般会默认为连接的主表的主键。
那么现在让我们看看on_delete这个参数里面有哪些选项:文章来源:https://www.toymoban.com/news/detail-726641.html
- models.CASCADE:级联操作,当主表中被连接的一条数据删除时,从表中所有与之关联的数据同时被删除
- models.SET_NULL:当主表中的一行数据删除时,从表中所有与之关联的数据的相关字段设置为null,此时注意定义外键时,这个字段必须可以允许为空
- models.PROTECT:当主表中的一行数据删除时,由于从表中相关字段是受保护的外键,所以都不允许删除
- models.SET_DEFAULT:当主表中的一行数据删除时,从表中所有相关的数据的关联字段设置为默认值,此时注意定义外键时,这个外键字段应该有一个默认值,default也可以是一个函数(在任意字段均可),此时可以,注意这时只传递函数名称,django在操作时会帮我们自动执行
def publisher():
return Publisher.objects.get(pk=1)
class Book(models.Model):
name = models.CharField(max_length=64,blank=True)
content = models.TextField(blank=True)
pub_time = models.DateTimeField(auto_now_add=True)
publisher = models.ForeignKey(Publisher,on_delete=models.SET_DEFAULT,null=True,default=publisher)
- models.SET():当主表中的一条数据删除时,从表中所有的关联数据字段设置为SET()中设置的值,与models.SET_DEFAULT相似,只不过此时从表中的相关字段不需要设置default参数
- models.DO_NOTHING:什么都不做,一切都看数据库级别的约束,注数据库级别的默认约束为RESTRICT,这个约束与django中的models.PROTECT相似
2.主键
Django是一个流行的Python Web框架,它提供了许多强大的功能和工具,用于简化开发高性能、可扩展的Web应用程序。其中一个关键概念是主键(Primary Key),它在数据库中用于唯一标识每个记录。
在Django中,主键是一个特殊的字段,用于确保每个数据库记录的唯一性。默认情况下,Django会自动为每个模型(Model)添加一个名为"id"的主键字段,该字段使用自增长整数作为唯一标识符。
主键在数据库中起着非常重要的作用。它不仅用于确保数据的唯一性,还可以用作数据之间的关联。通过在模型中定义外键(Foreign Key),可以轻松地建立表与表之间的关系,实现数据的连接和查询。
Django提供了多种主键类型,可以根据实际需求选择合适的类型。除了默认的自增长整数主键,还可以使用UUID、字符型字段等作为主键。这样可以更好地适应不同类型的应用程序和数据库需求。
在使用Django开发应用程序时,主键的正确使用非常重要。它不仅能够提高数据的查询效率和准确性,还可以简化代码逻辑和数据管理。通过合理地设计和使用主键,可以实现更高效、可靠的Web应用程序。
总而言之,Django的主键是确保每个数据库记录的唯一性和关联性的重要工具。它为开发人员提供了灵活的选择,以满足各种应用程序和数据库需求。正确地使用主键可以提高数据管理和查询效率,同时简化代码逻辑。文章来源地址https://www.toymoban.com/news/detail-726641.html
到了这里,关于Django之主键外键详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!