Trong bài viết này, chúng ta sẽ thảo luận về cách thêm dữ liệu vào mối quan hệ nhiều đến nhiều trong Django ORM.
Bước đầu tiên, chúng ta tạo các lớp model:
from django.db import models
class Lop(models.Model):
ten = models.CharField(max_length=32, unique=True, verbose_name="Tên lớp")
class Meta:
db_table = "lop"
class MonHoc(models.Model):
ten = models.CharField(max_length=32, unique=True, verbose_name="Tên môn học")
class Meta:
db_table = "mon_hoc"
class HocSinh(models.Model):
GIOI_TINH_CHOICES = (
(0, "Nữ"),
(1, "Nam"),
(2, "Bảo mật"),
)
ten = models.CharField(max_length=32, unique=True, verbose_name="Tên")
tuoi = models.SmallIntegerField(verbose_name="Tuổi", default=18)
gioi_tinh = models.SmallIntegerField(choices=GIOI_TINH_CHOICES)
ngay_sinh = models.DateField()
# Quan hệ một đến nhiều
lop = models.ForeignKey(to="Lop", on_delete=models.CASCADE)
# Quan hệ nhiều đến nhiều
mon_hoc = models.ManyToManyField(to="MonHoc", db_table="hoc_sinh2mon_hoc", null=True)
# Quan hệ một một
chi_tiet = models.OneToOneField("ChiTietHocSinh", on_delete=models.CASCADE)
class Meta:
db_table = "hoc_sinh"
def __str__(self):
return self.ten
class ChiTietHocSinh(models.Model):
so_dien_thoai = models.CharField(max_length=32)
email = models.EmailField()
mo_ta = models.TextField(null=True, verbose_name="Mô tả cá nhân")
class Meta:
db_table = "chi_tiet_hoc_sinh"
Các phương pháp thêm dữ liệu vào quan hệ nhiều đến nhiều:
METHOD 1: THÊM BẰNG CÁC OBJECT
# Tạo một học sinh mới
hs = HocSinh.objects.create(ten="Mưa", tuoi=33, gioi_tinh=1, ngay_sinh="1996-11-12", lop_id=1, chi_tiet_id=1)
# Lấy môn học và học sinh
mh_python = MonHoc.objects.get(ten='Môn học Python')
hs1 = HocSinh.objects.filter(ten="Vương Ngũ").first()
# Thêm môn học vào học sinh
hs1.mon_hoc.add(mh_python)
METHOD 2: THÊM BẰNG ID
# Lấy ID của môn học
mh_python = MonHoc.objects.get(ten='Môn học Python')
mh_id = mh_python.id
# Lấy học sinh
hs1 = HocSinh.objects.filter(ten="Vương Ngũ").first()
# Thêm môn học qua ID
hs1.mon_hoc.add(mh_id)
METHOD 3: THÊM TỪ DANH SÁCH OBJECT
# Tạo danh sách môn học
mh_python = MonHoc.objects.get(ten='Môn học Python')
mh_linux = MonHoc.objects.get(ten='Môn học Linux')
danh_sach_mh = [mh_python, mh_linux]
# Lấy học sinh
hs1 = HocSinh.objects.filter(ten="Vương Ngũ").first()
# Thêm nhiều môn học cùng lúc
hs1.mon_hoc.add(*danh_sach_mh)
Trong phát triển ứng dụng thực tế, việc thêm dữ liệu từ một danh sách thường được sử dụng phổ biến.