DJango 学习(7)—— orm 创建表关系

DJango 学习(7)—— orm 创建表关系

介绍

orm 中 如何定义三种关系

pulish = models.ForeignKey(to="Publish") # 默认和主键建立表关系
	
authors = models.ManyToManyField(to="Author")
	
author_detail = models.OneToOneField(to="Author_detail")

ForeignKey
OneToOneField
   全自动在字段后面加 _id 

在 django 1.x 中外键默认都时级联更新级联删除

代码演示

"""
表与表之间的关系
	一对多
	
	多对多
	
	一对一
"""
图书表

出版社表

作者表

作者详情表
"""
图书和出版社是一对多的关系,外键字段建在多的一方,图书。

图书和作者是多对多关系,需要创建第三张表

作者和作者详情表是一对一的关系
"""
class User(models.Model):

    # CharField 必须要有 max_length 参数,不指定会报错
    # verbase_name 该参数是所有字段都有的,就是用来对字段的解释

    # 相当于 id int primary key auto_increment
    id = models.AutoField(primary_key=True, verbose_name="主键")
    # name char(32)
    name = models.CharField(max_length=32,verbose_name="用户名")
    # password int
    password = models.IntegerField(verbose_name="密码")
    age = models.IntegerField(verbose_name="年龄")
    info = models.CharField(verbose_name="个人简介", max_length=32, null=True) # 该字段可以为空
    hobby = models.CharField(max_length=32, verbose_name="爱好", default="study") # 直接设置默认值

# 创建表关系,先创建基表,再创建外键字段

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")
    price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="价格")
    # 8 8位数字,其中小数部分占两位

    # 图书和出版社是 一对多 的关系,外键建在多的那张表上
    pulish = models.ForeignKey(to="Publish") # 默认和主键建立表关系

    # 如果字段对应的是 ForeignKey 那么 orm 会自动再字段的后面加 _id
    # 如果写了 _id ,orm 也会再后面继续加 _id
    # 后面在定义 ForeignKey 时不要加 _id 

    # 图书和作者是 多对多关系,外键建在哪张表都可以,并且不用建第三张表
    authors = models.ManyToManyField(to="Author")
    # authors 是虚拟字段,让 orm 直到作者和图书表是多对多关系,并且自动创建第三张表

class Publish(models.Model):
    name = models.CharField(max_length=32, verbose_name="出版社名称")
    addr = models.CharField(max_length=32, verbose_name="地址")

class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者名")
    age = models.IntegerField(verbose_name="年龄")

    # 作者和作者详情表是 一对一 表关系
    author_detail = models.OneToOneField(to="Author_detail")

class Author_detail(models.Model):
    phone = models.BigIntegerField(verbose_name="联系方式")
    addr = models.CharField(max_length=32, verbose_name="作者地址")

运行结果

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个流行的高级Python Web框架,它提供了很多内置的功能,包括一个强大的ORM(对象关系映射)系统和用于快速搭建应用的能力。如果要在Django中创建一个通知(Notification)应用程序,通常会涉及以下几个步骤: 1. **模型设计**:首先,你需要定义一个`Notification`模型,包含基本的信息如标题、内容、发送者和接收者等。可能还会有一个状态字段(如已读/未读)。 ```python from django.db import models class Notification(models.Model): title = models.CharField(max_length=200) content = models.TextField() sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_notifications') recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_notifications') is_read = models.BooleanField(default=False) ``` 2. **视图处理**:对于用户接收和管理通知,你可以创建视图函数来显示通知列、标记为已读、删除通知等。例如,展示通知可能涉及到从数据库获取用户的通知并分页展示。 3. **模板渲染**:创建HTML模板,比如`notifications.html`,用于显示通知详情或通知列。 4. **信号和任务**:如果需要异步处理(比如通过邮件、推送通知等),可以使用Django的信号系统结合Celery或其他任务队列工具。 5. **URL配置**:在urls.py文件中设置路由,将用户访问通知的URL映射到相应的视图函数。 6. **权限管理**:为了保护用户的隐私,可能需要对哪些用户可以看到特定通知进行权限控制。 完成以上步骤后,用户就可以在Django网站上看到和管理他们的通知了。如果你有更具体的问题,比如如何实现某种功能或者遇到技术难题,欢迎提问:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值