django_models.py

DonQ·2021년 1월 15일
0

TIL

목록 보기
19/31
post-thumbnail

delete CASCADE

  • Address 모델은 User모델을 참조하며 User모델이 지워지면 그 Address모델도 지워진다.

class User(models.Model):
	email    = models.CharField(max_length=45)
    password = models.ChatField(max_length=200)
    
class Address(models.Model):
	user = models.Foreignkey(User, on_delete=models.CASCADE)	

django str 메서드

class Menu(models.Model):
	name = models.CharField(max_length=45)
    def __str__(self):
    	return self.name

str() 메서드는 메뉴 클래스의 객체의 문자열 표현을 리턴한다.
default 값은 모델명 object 이다.
디폴트인 경우 객체를 알아보기 어려우므로 정의하는것이 좋다

many-to-many relationships

  • 중간 필드 설정시 자동으로 설정 진행
  • 직접 설정 원할시 through을 활용하여 중간 클래스 설정
from django.db import models

class Person(models.Model):
	name = models.CharField(max_length=128)
	def __str__(self):
    	return self.name

class Group(models.Model):
        name = models.CharField(max_length=128)
        members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
        person = models.ForeignKey(Person, on_delete=modles.CASCADE)
        group = mddels.ForeignKey(Group, on_delete=models.CASCADE)
    

Meta options

모델 클래스 내부에 Meta라는 이름의 클래스를 선언하여 모델에 메타 데이터를 추가

class User(models.Model):
	number = models.IntegerField()
    
    class Meta:
    	db_table = 'users'
 # 데이터베이스 테이블의 이름을 users로 지정

역참조 경우 기존 속성으로 객체 호출 불가
호출 하기 위해
1. [classname]_set 속성 사용
2. related_name 사용

class User(models.Model):
    name = models.CharField(max_length=45)
    job  = models.ForeignKey('Occupation', on_delete = models.CASCADE)

class Occupation(models.Model):
	name = models.CharField(max_length=45)
    
profile
꾸준히 쌓아가는 코딩 Study

0개의 댓글