Django數據模型--表關系(一對多)
阿新 • • 發佈:2018-09-18
protected mage -a link play classes 進行 -i 返回
一、一對一關系
使用方法:models.ForeignKey(要關聯的模型)
舉例說明:年級、教師和學生
from django.db import models
class Grade(models.Model):
name = models.CharField(max_length=)
class Student(models.Model):
name = models.CharField(max_length=)
grade = models.ForeignKey(Grade)
註意:外鍵定義在多方
參數:
ForeignKey(ForeignObject) # ForeignObject(RelatedField) to, # 要進行關聯的表名 to_field=None, # 要關聯的表中的字段名稱 on_delete=None, # 當刪除關聯表中的數據時,當前表與其關聯的行的行為 - models.CASCADE,刪除關聯數據,與之關聯也刪除 - models.DO_NOTHING,刪除關聯數據,引發錯誤IntegrityError - models.PROTECT,刪除關聯數據,引發錯誤ProtectedError - models.SET_NULL,刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空) - models.SET_DEFAULT,刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值) - models.SET,刪除關聯數據, a. 與之關聯的值設置為指定值,設置:models.SET(值) b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象) def func(): return 10 class MyModel(models.Model): user = models.ForeignKey( to="User", to_field="id" on_delete=models.SET(func),) related_name=None, # 反向操作時,使用的字段名,用於代替 【表名_set】 如: obj.表名_set.all() related_query_name=None, # 反向操作時,使用的連接前綴,用於替換【表名】 如: models.UserGroup.objects.filter(表名__字段名=1).values(‘表名__字段名‘) limit_choices_to=None, # 在Admin或ModelForm中顯示關聯數據時,提供的條件: # 如: - limit_choices_to={‘nid__gt‘: 5} - limit_choices_to=lambda : {‘nid__gt‘: 5} from django.db.models import Q - limit_choices_to=Q(nid__gt=10) - limit_choices_to=Q(nid=8) | Q(nid__gt=10) - limit_choices_to=lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption=‘root‘) db_constraint=True # 是否在數據庫中創建外鍵約束 parent_link=False # 在Admin中是否顯示關聯數據
調用方式:
student = Student()
grade = student.grade
grade = Grade()
students = grade.student_set.all()
Django數據模型--表關系(一對多)