django 一對多和多對多字段的操作訓練

2022-05-17 06:47:24 字數 2257 閱讀 9521

django專案models.py建表

from django.db import models

class myclass(models.model):

cname = models.charfield(max_length=12)

class student(models.model):

sname = models.charfield(max_length=12)

myclass=models.foreignkey(to='myclass')

def __str__(self):

return self.sname

class theacher(models.model):

tname = models.charfield(max_length=12)

myclass = models.manytomanyfield(to='myclass')

def __str__(self):

return self.tname

import os

import sys

if __name__ == "__main__":

os.environ.setdefault("django_settings_module", "day66.settings")

import django

django.setup()

#、查詢id=1的班級的所有的學生

#方法1.1、先獲取id=1的班級物件反向查詢學生物件

# print(myclass.objects.get(id=1).student_set.all())

# 方法1.2、根據queryset物件反向查詢

# print(myclass.objects.filter(id=1).values('student__sname'))

#方法2、學生物件正向查詢班級id=1的學生

# print(student.objects.filter(myclass__id=1))

#、查詢id=2的班級的所有老師

#反向查詢基於queryset和物件查詢

# print(myclass.objects.filter(id=2).values('theacher__tname'))

# print(myclass.objects.get(id=2).theacher_set.all())

# #正向查詢

# print(theacher.objects.filter(myclass__id=2))

#給id=2的班級新增乙個id=6的學生,如果學生原本有班級則改成現在班級(學生只能對應乙個班級)

# print(myclass.objects.get(id=2).student_set.add(student.objects.get(id=6)))

#把所有學生劃到1班去

# print(myclass.objects.get(id=1).student_set.set(student.objects.all()))

#給id=2的老師新增乙個班級

# theacher.objects.get(id=2).myclass.add(*[2,3])

#把id=2的老師關聯的1班清空解除關聯關係

# theacher.objects.get(id=2).myclass.remove(1)

# 把id=2的老師關聯的班清空解除關聯關係

# theacher.objects.get(id=2).myclass.clear()

#id = 2的老師現在開設一新班級:php

# theacher.objects.get(id=2).myclass.create(cname='php')

#類似方法2先建立課程然後繫結關係

# myclass.objects.create(cname='go')

# theacher.objects.get(id=2).myclass.add(6)

#給id=2的班級新增乙個id=3的老師

# myclass.objects.get(id=2).theacher_set.add(3)

#myclass.objects.get(id=2).theacher_set.add(theacher.objects.get(id=3))

#多對多情況add可以直接寫id或者物件,一對多的一的那方新增時只能寫物件

總結:給一對多新增物件是時,呼叫者時是一時add只能新增物件,是多的一方是物件和id都可以

odoo的多對多,一對多欄位新增資料

many2many 0,0,根據values裡面的資訊新建乙個記錄。1,id,更新id id的記錄 寫入values裡面的資料 2,id 刪除id id的資料 呼叫unlink方法,刪除資料以及整個主從資料鏈結關係 3,id 切斷主從資料的鏈結關係但是不刪除這個資料 4,id 為id id的資料新增...

Django ORM 一對多 和 多對多

在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...

django 一對多,多對多查詢

假設有表的關係如下 1 class classes models.model 2 name models.charfield max length 32 3 institute models.charfield max length 32 4 headteacher models.foreignke...