Django模型(三)

知識(shí)要點(diǎn):

表關(guān)系的實(shí)現(xiàn)

一對(duì)多表關(guān)系

在Mysql中一對(duì)多是通過外鍵實(shí)現(xiàn)的,在django模型中通過ForeignKeyfield類型實(shí)現(xiàn)。

一對(duì)一表關(guān)系

在Mysql中一對(duì)一是通過外鍵加唯一鍵實(shí)現(xiàn)的,在django模型中通過OneToOneField類型實(shí)現(xiàn)。

多對(duì)多表關(guān)系

在Mysql中多對(duì)多是通過中間表外鍵加聯(lián)合唯一鍵實(shí)現(xiàn)的,在django模型中通過ManyToManyField類型實(shí)現(xiàn)。中間表模型會(huì)自動(dòng)幫我們創(chuàng)建好。

例子:

class Department(models.Model):
    d_id = models.AutoField(primary_key=True)
    d_name = models.CharField(max_length=30)
    def __str__(self):
        return 'Department<d_id=%s,d_name=%s>'%(
            self.d_id,self.d_name
        )

class Student(models.Model):
    s_id = models.AutoField(primary_key=True)
    s_name = models.CharField(max_length=30)
    department = models.ForeignKey('Department')
    course = models.ManyToManyField('Course')
    def __str__(self):
        return 'Student<s_id=%s,s_name=%s>'%(
            self.s_id,self.s_name
        )


class Course(models.Model):
    c_id = models.AutoField(primary_key=True)
    c_name = models.CharField(max_length=30)
    def __str__(self):
        return 'Course<c_id=%s,c_name=%s>'%(
            self.c_id,self.c_name
        )

class Stu_detail(models.Model):
    s_id = models.OneToOneField('Student')
    age = models.IntegerField()
    gender = models.BooleanField(default=1)
    country = models.CharField(max_length=30,null=True)
    def __str__(self):
        return 'Stu_detail<s_id=%s,age=%s,gender=%s,country=%s>'%(
            self.s_id,self.age,self.gender,self.country
        )

關(guān)系表中數(shù)據(jù)的操作

from .models import Department,Student,Course
def add_info(request):
    # d1 = Department(d_name='CC')
    # d1.save()
    # 一對(duì)多關(guān)系加內(nèi)容
    # s1 = Student(s_name='xiaoming')
    # s1.department = d1
    # s1.save()
    # 多對(duì)多關(guān)系添加內(nèi)容
    # c1 = Course(c_name='python')
    # s1 = Student.objects.first()
    # c1.save()
    # s1.course.add(c1)
    return HttpResponse('添加數(shù)據(jù)成功')
    
def search_info(request):
    rs = Student.objects.all()[0]
    # 一對(duì)多的查詢
    print(rs.department)
    # 多對(duì)多的正向查詢
    print(rs.course.all())
    cs = Course.objects.first()
    # 多對(duì)多反向查詢
    print(cs.student_set.all())
    return HttpResponse('查詢數(shù)據(jù)成功')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容