Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

JustDoEat

[python/models] 간단한 내장 DB사용 공부 본문

카테고리 없음

[python/models] 간단한 내장 DB사용 공부

kingmusung 2024. 1. 1. 18:34

 

오늘의 어리버리

■ models.py에서 null=true 안하면

T=Teacher(subject='과학') 이부분이 저장 안됌.

그래서 생성과 동시에 학생객체를 연결시켜줘야 하나 했는데 그럴필요가 없다고함. 나중에 한다고함.

 

■ cmd창에서 객체 생성 후 save()를 하고 그 후 작업을 해야 오류가 안나옴.

 

■외래키로 다대다 관계를 표기하려면 ManytoMany를 써야하는데 ForeignKey 를 써서 벙쪘다.

 

다대다 관계: ManytoMany

다대일 관계: ForeignKey

 

기록

■ManytoMany, ForeignKey 사용

■역참조 "나를 참고하는 객체(클레스)이름_set"
즉 영어선생님을 참조하는 학생들을 선생객체를 통해 역참조 하는 방법.

■ S = Students.objects.filter(name__contains='kim') 처럼 변수__contains 를 하면 필터링이 되는데

 __icontains를 하면 대소문자 구분을 안해주는..

■T=T.student_set.all()

"나를 참고하는 객체(클레스)이름_set" 함으로써 역참조 ..

1.ManytoMany사용

 

pybo/models.py

from django.db import models

class Teacher(models.Model):
    subject = models.CharField(max_length=100)
    students = models.ManyToManyField('Student', related_name='teachers',null='true')

class Student(models.Model):
    name = models.CharField(max_length=100)

 

 

S = Student(name='kimsw')

S.save()

S = Student(name='kimfw')

S.save()

S = Student(name='leesw')

S.save()


//학생 객체 생성


T=Teacher(subject='과학')

T.save()

T2=Teacher(subject='수학')

T2.save()

//선생 객체 생성


S = Students.objects.filter(name__contains='kim')

//학생이 가진.오브젝트들에.필터를씌우는데(이름에'kim'이 포함된 사람들)

T.students.set(S)

T.save()

//필터링한 결과를 집합 형태로 Teacher객체의 students값에 대입 후 저장


S=Students.objects.get(name='leesw')

//학생 객체중에 leesw 라는 이름을 가진 객체를 선택 후  변수S에 저장

 

2.ForeignKey 사용

class Teacher(models.Model):
    subject = models.CharField(max_length=100)
    def __str__(self):
        return self.subject

class Student(models.Model):
    name = models.CharField(max_length=100)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    #학생이랑 연결된 선생님이 잘리면 해당선생님과 연결된 학생들도 삭제됨
    def __str__(self):
        return self.name
T = Teacher(subject='영어')
T.save()
T=Teacher.objects.get(subject='영어')
//선생객체 생성 후 영어 과목인 선생님을 T에 저장

S= Student(name='wjs',teacher=T)

T=T.student_set.all()

//"나를 참고하는 객체(클레스)이름_set" 역참조.
// 즉 영어선생님을 참조하는 학생들을 선생객체를 통해 역참조 하는 방법.
print(T)

결과: <QuerySet [<Student: wjs>]>