对django中foreignkey的简单使用详解

对Django中ForeignKey的简单使用详解

ForeignKey的作用

在Django的ORM中,ForeignKey是用来建立模型之间关系的一种字段类型。其作用是将一个模型与其他一个模型关联起来。

例如,在一个图书管理系统中,每一本书都是从一个出版社出版的,我们就可以在书的模型中使用ForeignKey关联出版社的模型。

ForeignKey的用法

ForeignKey的定义:

models.ForeignKey(to, on_delete, **options)
  • to :关联的模型。
  • on_delete:定义当被关联的模型数据被删除时,ForeignKey字段如何处理。
  • **options:其他关键字参数。

下面是一个简单的示例:

示例1:对一个模型进行关联

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
    publication_date = models.DateField()
    num_pages = models.IntegerField(blank=True, null=True)

在以上代码中,Book模型使用ForeignKey关联了Publisher模型。通过将models.ForeignKey(Publisher, on_delete=models.CASCADE)添加到Book模型中的publisher字段,我们就可以通过一个外键实现这两个模型之间的关联。

示例2:调用被关联模型的属性

如果需要调用被关联模型的属性,可以使用.属性名来获取。

book_list = Book.objects.all()
for book in book_list:
    print(book.title, book.publisher.name)

在以上代码中,通过book.publisher.name来获取book模型关联的publisher模型的name属性。

外键数据关联的删除操作

当使用ForeignKey关联模型时,我们需要考虑当被关联模型数据被删除时,ForeignKey字段如何处理。on_delete参数决定了外键数据的删除行为。

  • models.CASCADE:当被关联模型数据被删除时,所有引用该数据的数据也将删除。
  • models.PROTECT:当被关联模型数据被删除时,将抛出ProtectedError
  • models.SET_NULL:当被关联模型数据被删除时,ForeignKey字段将设为NULL。
  • models.SET_DEFAULT:当被关联模型数据被删除时,ForeignKey字段将设为默认值。
  • models.DO_NOTHING:当被关联模型数据被删除时,什么也不做。

下面是一个简单的示例:

示例3:使用on_delete参数

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
    publication_date = models.DateField()
    num_pages = models.IntegerField(blank=True, null=True)

在以上代码中,我们将on_delete参数设置为models.CASCADE,当Publisher模型的某个数据被删除时,与之关联的Book模型数据也将被删除。

总结

通过上述示例,我们可以看到在Django框架中使用ForeignKey进行模型之间的关联非常简单且便捷。通过设置相关参数和调用方法,我们可以很方便地完成对其的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对django中foreignkey的简单使用详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django Rest Framework之版本控制

    settings.py: REST_FRAMEWORK = { ‘DEFAULT_VERSION’: ‘v1’, # 默认版本 ‘ALLOWED_VERSIONS’: [‘v1’, ‘v2’], # 允许的版本 ‘VERSION_PARAM’: ‘version’ # URL中获取值的key }  urls.py: from django.conf.urls…

    2023年4月9日
    00
  • Django model数据 时间格式

    from datetime import datetime dt = datetime.now() print ‘时间:(%Y-%m-%d %H:%M:%S %f): ‘ , dt.strftime( ‘%Y-%m-%d %H:%M:%S %f’ ) print ‘时间:(%Y-%m-%d %H:%M:%S %p): ‘ , dt.strftime( ‘%y…

    Django 2023年4月9日
    00
  • 浅谈Python之Django(三)

    首先需要阐述的是,“浅谈Python之Django(三)”是一篇介绍Django框架的文章,偏重于对Django的基础概念和应用的讲解。这篇文章主要分为以下几个部分: 1. Django介绍 这部分主要是对Django框架进行简单介绍,涵盖了Django的功能特点、适用场景、优势和缺点等信息。 2. Django入门 这部分主要是讲解如何在本地环境下搭建Dj…

    Django 2023年5月16日
    00
  • Django分页设置

      1.  “”” 分页组件使用示例: obj = Pagination(request.GET.get(‘page’,1),len(USER_LIST),request.path_info) page_user_list = USER_LIST[obj.start:obj.end] page_html = obj.page_html() return re…

    Django 2023年4月16日
    00
  • 详解Django模版中加载静态文件配置方法

    当我们使用Django进行web开发时,我们常常需要加载静态文件,比如CSS样式、JavaScript脚本、图片等。在Django中,我们通常使用模版来组织和呈现我们的网页,那么如何在Django模版中加载静态文件呢? 下面是Django模版中加载静态文件配置方法的攻略: 第一步:在settings.py文件中设置静态文件路径 在django的setting…

    Django 2023年5月16日
    00
  • centos7.4+mysql5.6+virtualenv+python3.6+nginx+uwsgi+django生产环境搭建

    # yum update 二 安装gcc  lrzsz软件 # yum install gcc 用来编译python3.6源码 # yum install lrzsz 用来上传文件 三 安装mysql5.6 3.1 下载mysql的repo源 # wget http://repo.mysql.com/mysql-community-release-el7-5…

    2023年4月9日
    00
  • 搭建高性能的 Django 服务器栈

    http://logic0.blog.163.com/blog/static/18892814620136258532112/ 搭建高性能的 Django 服务器栈   2013-07-25 23:00:22|  分类:Django学习 网站  |举报|订阅 对不起各位,我有点稍微标题党了。 本文针对裸机 Linux 搭建 Django 的服务器栈,可直接应…

    Django 2023年4月12日
    00
  • 关于celery django django-celery搭配报错问题及解决方法

    G:\python3_django\DFpro\mypro (win)(py3_django) λ python manage.py celery worker –loglevel=infoTraceback (most recent call last):  File “manage.py”, line 10, inexecute_from_comman…

    Django 2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部