Django 공식 문서 요약 (1) - Models 모델
23642 단어 Django
본고의 주요 내용은 Django 프레임워크 중의 모델에 대한 지식 소결이다
#1 환경
Python3.7.3
Django==2.0.7
#2 필드
#2.1 일대다 (ForeignKey)
일대다: fk 필드는 '다중' 모드에서 정의됩니다.
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
related_name="entryblogs",
related_query_name="entryqueryblogs"
)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField()
def __str__(self):
return self.headline
#2.1 매개변수
models.ForeignKey(to,on_delete,** options)
# to : ( )
# on_delete : " " ( )
#2.2 자가 연관
models.ForeignKey(to='self', on_delete=models.CASCADE)
#2.3 연관 관계
on_delete=None, # , field
on_delete=models.CASCADE, # ,
on_delete=models.DO_NOTHING, # ,
on_delete=models.PROTECT, # , ProtectedError
# models.ForeignKey(' ', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL, # , null( FK , )
# models.ForeignKey(' ', on_delete=models.SET_DEFAULT, default=' ')
on_delete=models.SET_DEFAULT, # , ( FK , )
on_delete=models.SET, # ,
a. , :models.SET( )
b. , :models.SET( )
#2.4 데이터베이스 표현
데이터베이스를 생성할 때 Django는 "id"필드 이름을 추가하여 데이터베이스 열 이름을 만들 수 있습니다. 이 내용을 명시적으로 변경할 수 있습니다 dbcolumn
#2.5 역방향 찾기(related name)
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
# ...
class Entry(models.Model):
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
related_name="entryblogs",
)
# ...
>>> e = models.Entry.objects.get(id=1)
>>> e.blog
<Blog: haha>
>>> b = models.Blog.objects.get(id=1)
>>> b.entryblogs
<django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x10d58c908>
>>> b.entryblogs.all() # , , all()
<QuerySet [<Entry: 1>]>
#2.6 데이터를 직접 가져오는 대칭 이동(related query name)
>>> b = models.Blog.objects.get(id=1)
>>> models.Entry.objects.filter(blog=b).filter(headline=1)
<QuerySet [<Entry: 1>]>
>>> models.Blog.objects.filter(id=1).filter(entryqueryblogs__headline=1)
<QuerySet [<Blog: haha>]>
#2.2 멀티 쌍(ManyToManyField)
ManyToManyField(to,**options)
MtoM 필드는 필요에 따라 두 개의 관련 테이블 중 하나에 넣을 수 있습니다
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
# ...
class Entry(models.Model):
authors = models.ManyToManyField(Author)
# ...
#2.3 일대일(OneToOneField)
OneToOneField(to,on_delete,parent_link = False,** options)
#3 Meta
class Entry(models.Model):
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
related_name="entryblogs",
related_query_name="entryqueryblogs"
)
# ...
class Meta:
pass
#3.1 테이블 이름 설정
class Entry(models.Model):
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
related_name="entryblogs",
related_query_name="entryqueryblogs"
)
class Meta:
db_table = "app _Entry"
# app + ( , , : app + )
#3.2 테이블 간 주문 (order with respect to)
현재 이 항목들을 통해 이 기능은 약간 불편하게 느껴지는데, 구체적으로 어떻게 사용하는지는 그래도 말해야 한다
class Entry(models.Model):
blog = models.ForeignKey(
Blog,
on_delete=models.CASCADE,
related_name="entryblogs",
related_query_name="entryqueryblogs"
)
# ...
class Meta:
order_with_respect_to = 'blog' # fk
>>> b = models.Blog.objects.get(id=1)
>>> b
<Blog: haha>
>>> b.get_entry_order()
<QuerySet [1, 2]> # int , obj
얻은 것은 단지 id로 구성된 목록일 뿐, 우리가 원하는queryset 데이터가 아니다
# obj
b = models.Blog.objects.get(id=1)
# obj.get_ _order()
b.get_entry_order()
#3.3 유니크 together 결합
주어진 필드를 합쳐서 표에서 유일한 값을 유지하다
class Entry(models.Model):
body_text = models.TextField()
pub_date = models.DateField()
# ...
class Meta:
unique_together = (("body_text", "pub_date"),)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.