VẤN ĐỀ THÊM NHIỀU ĐẾN NHIỀU TRONG ORM

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.

Thẻ: Django ORM ManyToManyField ForeignKey Mối quan hệ nhiều đến nhiều

Đăng vào ngày 22 tháng 7 lúc 17:46