`

django(7)数据库外键及mantyomany

 
阅读更多
[root@localhost project0904]# vim app0904/models.py
from __future__ import unicode_literals

from django.db import models

# Create your models here.

class Teacher(models.Model):
  id=models.IntegerField(primary_key=True)
  name=models.CharField(max_length=50)
  class Meta:
    db_table='teacher'

class Student(models.Model):
  id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=50)
  age=models.IntegerField()
  sex=models.IntegerField()
  teacher=models.ForeignKey(Teacher)
  class Meta:
    db_table='student'

[root@localhost project0904]# python manage.py makemigrations
You are trying to add a non-nullable field 'teacher' to student without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option: 1\
Please select a valid option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 1
Migrations for 'app0904':
  app0904/migrations/0002_auto_20160905_0220.py:
    - Create model Teacher
    - Add field teacher to student
[root@localhost project0904]# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app0904, auth, contenttypes, sessions
Running migrations:
  Applying app0904.0002_auto_20160905_0220... OK



[root@localhost project0904]# python manage.py shell  
Python 2.7.5 (default, Jun 17 2014, 18:11:42) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from app0904.models import Student ,Teacher
>>> 
>>> Teacher.objects.create(id=1,name='teacherWang')
<Teacher: Teacher object>
>>> Teacher.objects.create(id=2,name='teacherLiu') 
<Teacher: Teacher object>
>>> student=Student.objects.get(id=1)
>>> student.teacher.name
u'teacherWang'
>>> teacher=Teacher.objects.get(id=1)
>>> student=teacher.student_set.get(id=1)
>>> student.name
u'wang1'

 

 

 

ManyToMany

 

 

[root@localhost project0904]# vim app0904/models.py          

from __future__ import unicode_literals

from django.db import models

# Create your models here.

class Teacher(models.Model):
  id=models.IntegerField(primary_key=True)
  name=models.CharField(max_length=50)
  class Meta:
    db_table='teacher'

class Student(models.Model):
  id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=50)
  age=models.IntegerField()
  sex=models.IntegerField()
  teacher=models.ForeignKey(Teacher)
  class Meta:
    db_table='student'


class Group(models.Model):
  id=models.IntegerField(primary_key=True)
  name=models.CharField(max_length=50)
  members=models.ManyToManyField(Student,through='MemberShip')
  class Meta:
    db_table='group'



class MemberShip(models.Model):
  id=models.IntegerField(primary_key=True)
  group=models.ForeignKey(Group)
  student=models.ForeignKey(Student)
  class Meta:
    db_table='MemberShip'


[root@localhost project0904]# python manage.py shell
Python 2.7.5 (default, Jun 17 2014, 18:11:42) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 
>>> from app0904.models import *
>>> studentList=Student.objects.filter(teacher_id=1)
>>> len(studentList)
2
>>> teacher=Teacher.objects.get(id=1)
>>> group=Group.objects.create(id=2,name='teacherWangs')
>>> MemberShip(group=group,student=studentList[0])
<MemberShip: MemberShip object>
>>> MemberShip(group=group,student=studentList[1])
<MemberShip: MemberShip object>

>>> group=Group.objects.get(id=2)
>>> group.name
u'teacherWangs'

>>> teacher.name
u'teacherWang'
>>> teacher.student_set.all()
<QuerySet [<Student: Student object>, <Student: Student object>]>
>>> len(teacher.student_set.all())
2
>>> group=Group.objects.get(id=2)
>>> studentList=group.members.all()
>>> groupList=student.group_set.all()
>>> 

 

分享到:
评论

相关推荐

    django orm 外键操作-练习示例

    在 Django 框架中,ORM (Object-Relational Mapping) 是一种强大的工具,它允许开发者用 Python 对象来操作数据库,而无需直接编写 SQL 语句。外键(Foreign Key)是数据库关系中的一种机制,用于在一个表中引用另一...

    django-dfk:Django 的延迟外键

    延迟外键在概念上类似于通用外键,不同之处在于它们在运行时解析为真正的外键,并导致在数据库中创建正确的外键。 这个包允许你做两件事: * Declare that a model's foreign key field is 'deferrable', and ...

    django在开发中取消外键约束的实现

    在Django中,外键约束(Foreign Key Constraints)用于建立两个模型之间的关系,通常用于表示一对多或一对一的关联。然而,在某些开发场景下,可能需要取消外键约束,这可能是出于性能优化、数据迁移或其他设计考虑...

    第19周-第19章节-Python3.5-基于DjangoORM的外键实现增加用户(含select标签).avi

    第19周-第19章节-Python3.5-基于DjangoORM的外键实现增加用户(含select标签).avi

    django foreignkey(外键)的实现

    Django 的模型层提供了一种方式,能够让你在 Python 中定义数据库表结构。其中,外键(ForeignKey)是 Django ORM(对象关系映射)中的一个字段类型,用于在两个模型之间创建关联。本文详细介绍了 Django 中外键字段...

    django 删除数据库表后重新同步的方法

    Django也包含ORM(对象关系映射)系统,这一系统允许开发者使用Python代码来操作数据库,而不是直接使用SQL语句。 在使用Django进行Web应用开发的过程中,我们可能会遇到需要对数据库结构进行修改的情况,例如,...

    Django 查询数据库并返回页面的例子

    本文将介绍在Python框架Django中如何进行数据库查询以及将查询结果渲染到Web页面上的过程。Django是一个高级的、开源的Web应用框架,它遵循模型-视图-控制器(MVC)设计模式,提供了快速开发Web应用的便捷性。 首先...

    Django中ORM外键和表的关系详解

    在Django中,ORM(Object-Relational Mapping)是一种技术,它允许开发者使用面向对象的方式来操作数据库,将数据库中的表映射成Python类,而外键(Foreign Key)是数据库中用于建立表与表之间关联的一种机制。...

    解决django同步数据库的时候app models表没有成功创建的问题

    在使用Django框架开发Web应用时,数据库的同步是一个常见且重要的操作,它确保数据库结构与我们的应用程序中定义的模型保持一致。Django通过迁移(migrations)的方式,自动跟踪模型的改动,并将这些改动应用到...

    Django查询数据库的性能优化示例代码

    Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理。如果事先理解Django的优化技巧,开发过程中稍稍留意,后期会省不少的...

    在django admin中配置搜索域是一个外键时的处理方法

    我原来默认认为在处理外键搜索的时候,django会自动将该外键的行数据以str()化之后进行搜索,但其实并不是这样的,如果将外键加入到搜索域中,需要明确写出来。 这个是我从网上查到的解决方案,测试可用,如下: ...

    Python_django_web学生管理系统(使用mysql数据库)

    使用Python编程语言 Django MySQL数据库开发的web版学生管理系统,里面附带环境搭建的详细过程和开发过程中遇到的一些bug的讲解 使用Python编程语言 Django MySQL数据库开发的web版学生管理系统,里面附带环境搭建...

    Django Admin 实现外键过滤的方法

    说明和 Model 环境: ➜ python Python 3.6.3 |Anaconda custom (x86_64)| (default, Oct 6 2017, 12:04:38) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/...&gt;&gt;&gt; print(django.get_version()) 2.0.1 &gt;&gt;&gt; 20

    Django读取Mysql数据并显示在前端的实例

    在本实例中,我们将探讨如何使用Django框架从MySQL数据库中读取数据并将其呈现到前端页面上。Django是一个强大的Python Web开发框架,而MySQL则是一种广泛使用的关系型数据库管理系统。结合两者,我们可以构建动态的...

    django 连接数据库、上传文件

    在Python的Web开发框架Django中,连接数据库和处理文件上传是两个重要的功能。下面将详细阐述这两个主题。 首先,让我们来谈谈如何在Django中连接MySQL数据库。Django默认使用SQLite数据库,但通过配置可以方便地...

    python使用Django库向mysql数据库插入数据

    在Python开发领域,Django是一个强大的Web框架,它支持快速构建高效、可维护的网站应用。结合MySQL数据库,我们可以创建稳健的数据存储系统。本教程将详细介绍如何使用Django与MySQL协同工作,实现数据的插入操作。 ...

    django 连接数据库出现1045错误的解决方式

    在使用Django框架进行Web应用开发时,与数据库的交互是至关重要的环节。当你尝试运行`python manage.py migrate`命令来同步数据库模型时,如果遇到`django.db.utils.OperationalError: (1045, "Access denied for ...

    Django数据库内省工具通过数据表名就可以动态创建一个即时可用的Djangomodels对象

    但是,这种方法不支持数据库索引、外键关系的自动创建,以及自定义模型方法和属性。如果需要这些功能,可能需要对生成的模型进行进一步的定制。 总的来说,Django的数据库内省工具为我们提供了一种便捷的方式,使...

    PythonDjango支持像PostgresCitus这样的分布式多租户数据库

    为了在Django项目中使用Citus,我们需要安装`citus` PostgreSQL扩展,并在Django的数据库配置中指定Citus连接。配置文件可能如下所示: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends....

    Django之Mode的外键自关联和引用未定义的Model方法

    Django Model的外键自关联 在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门应该是一个外键并引用Model ...

Global site tag (gtag.js) - Google Analytics