django 1.8 공식 문서 번역:2-1-3 모델 요소 옵션
8250 단어 django
이 문서는 모델의 메타 클래스에서 그들을 설정할 수 있는 모든 메타 옵션을 설명합니다.
사용 가능한 메타데이터 옵션
abstract
Options.abstract
abstract = True의 경우 모델이 추상적인 베이스(abstract base class)임을 나타냅니다.
app_label
Options.app_label
기본 모델에 모델이 정의되어 있다면.py 이외(예를 들어 현재 사용하고 있는 모델이 myapp.models 서브 모듈에 있음) Django에게 이 모델이 어떤 응용 프로그램에 속하는지 알려줘야 합니다.
app_label = 'myapp'
Django 1.7 :
, models , app_label。
db_table
Options.db_table
모델에 사용된 데이터 테이블의 이름:
db_table = 'music_album'
데이터 테이블 이름
시간을 절약하기 위해 Django는 모델 클래스의 이름과 이를 포함하는 app 이름에 따라 데이터 테이블 이름을 자동으로 지정합니다. 하나의 모델의 데이터 테이블 이름은 이 모델의 '응용 탭' (관리자.py startapp에서 사용하는 이름) 사이에 밑줄을 그어 구성됩니다.
예를 들어 bookstore 응용 프로그램(manage.py startapp bookstore로 만들기)에는 Book이라는 모델이 있는데 그 데이터 테이블의 이름은 bookstorebook .
Meta 클래스의db 사용table 매개 변수로 데이터 테이블의 이름을 덮어씁니다.
데이터 테이블 이름은 SQL 보존자일 수도 있고 Python 변수에 나타나지 않는 특수 문자를 포함할 수도 있습니다. 이것은 Django가 자동으로 열 이름과 테이블 이름에 인용 부호를 추가하기 때문입니다.
MySQL에서 소문자로 테이블 이름 지정
당신이db 를 통과하면테이블 이름을 덮어쓸 때, 특히 MySQL을 백엔드로 사용한다면, 소문자로 테이블 이름을 짓는 것을 강력히 추천합니다.MySQL 고려 사항 참조
Oracle의 테이블 이름 따옴표 처리
Oracle의 30글자 제한, 그리고 흔히 볼 수 있는 약속에 따라 Django는 테이블의 이름을 줄이고 대문자로 바꿉니다.dbtable 값에 인용부호를 붙여서 이런 상황을 피하십시오.
db_table = '"name_left_in_lowercase"'
이 따옴표가 있는 이름은 Django가 지원하는 다른 데이터베이스 백엔드에도 사용할 수 있지만 Oracle을 제외하고는 따옴표가 아무런 역할을 하지 않습니다.자세한 내용은 Oracle 고려 사항을 참조하십시오.
db_tablespace
Options.db_tablespace
현재 모델이 사용하는 데이터베이스 테이블 공간의 이름입니다.기본값은 프로젝트 설정의 DEFAULT 입니다.TABLESPACE가 존재한다면.만약 백엔드가 테이블 공간을 지원하지 않는다면, 이 옵션은 무시할 수 있습니다.
default_related_name
Options.default_related_name
Django 1.8 :
이 이름은 현재 대상과의 관계에 기본적으로 사용됩니다.기본값set.
한 필드의 반전 명칭은 유일해야 하기 때문에, 당신이 당신에게 준 모형 설계 서브클래스를 줄 때 각별히 조심해야 한다.이름 충돌을 피하기 위해서 이름의 일부분은'%(app label)s'와'%(model name)s'를 포함해야 합니다. 탭의 이름과 모델의 이름이 바뀌고 둘 다 소문자입니다.추상 모델의 관련 이름을 자세히 보십시오.
get_latest_by
Options.get_latest_by
모델의 정렬 가능한 필드 이름(예: DateField, DateTimeField 또는 IntegerField)Manager의 latest()와earliest()에 사용되는 기본 필드를 지정합니다.
예를 들면 다음과 같습니다.
get_latest_by = "order_date"
자세한 내용은 latest () 문서를 보십시오.
managed
Options.managed
기본값은 True이며, Django가 migrate 명령에 적합한 데이터 테이블을 만들고 flush 관리 명령에서 제거한다는 뜻입니다.다시 말하면 Django는 이 데이터 테이블의 생명 주기를 관리할 것이다.
False인 경우 Django는 현재 모델에 대한 데이터 테이블을 생성하고 삭제하지 않습니다.만약 현재 모델이 이미 존재하는 것을 나타낸다면 다른 방법을 통해 만들어진 데이터베이스 보기나 데이터 테이블은 상당히 유용할 것이다.이것은 managed=False로 설정할 때 유일하게 다른 점입니다.모델 처리의 다른 모든 방면은 평상시와 같다.여기에는 다음이 포함됩니다.
이 기본 동작을 수정하려면, 중개표를 현식 모델로 만들고, ManyToManyField를 사용하십시오.through에서 사용자 정의 모델에 연결을 만듭니다.
managed=False가 있는 모델에 대한 테스트는 테스트가 시작될 때 정확한 표를 만들어야 합니다.
Python 차원에서 모델 클래스의 행동을 수정하는 데 관심이 있다면,managed=False를 설정하고 이미 존재하는 모델을 만들 수 있습니다.하지만 이런 상황에서 대리모델을 사용하는 것이 더 좋은 방법이다.
order_with_respect_to
Options.order_with_respect_to
주어진 필드에 따라 이 대상을 '정렬 가능' 으로 표시합니다. 이 속성은 보통 부모 대상에 질서정연하게 사용됩니다. 예를 들어 Answer와Question이 연결되면 한 문제에 최소한의 답이 있고 답의 순서가 매우 중요합니다. 이렇게 할 수 있습니다.
from django.db import models
class Question(models.Model):
text = models.TextField()
# ...
class Answer(models.Model):
question = models.ForeignKey(Question)
# ...
class Meta:
order_with_respect_to = 'question'
orderwith_respect_to 설정 후 모델은 관련 대상의 순서를 설정하고 얻는 두 가지 방법을 제공합니다: getRELATED_order() 및 setRELATED_order (). 여기서 RELATED는 소문자의 모델 이름입니다.예를 들어, Question 객체에 연관된 Answer 객체가 많다고 가정하면 반환된 목록에 연관된 Answer 객체의 주 키가 포함됩니다.
>>> question = Question.objects.get(id=1)
>>> question.get_answer_order()
[1, 2, 3]
Question 객체와 연관된 Answer 객체의 순서는 Answer 키 목록이 포함된 칸을 전송하여 설정할 수 있습니다.
>>> question.set_answer_order([3, 1, 2])
연관된 대상도 두 가지 방법이 있는데, getnext_in_order () 및 getprevious_in_order (), 적당한 순서대로 접근할 수 있습니다.Answer 객체가 id로 정렬된다고 가정합니다.
>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
>>> answer.get_previous_in_order()
order 수정with_respect_to
order_with_respect_to 속성은 추가 필드 (/데이터 테이블의 열) 를 추가합니다.order, 그래서 만약 당신이 첫 번째 이전 후에order를 추가하거나 수정했다면with_respect_to 속성, 적합한 이전 작업이 실행되고 적용되었는지 확인하십시오.
ordering
Options.ordering
객체 기본 순서, 객체 목록을 가져올 때 사용:
ordering = ['-order_date']
이것은 문자열의 목록이나 원조입니다.각 문자열은 필드 이름이며 앞에 선택적 "-"접두어가 있는 필드 이름입니다.앞에 "-"가 없는 필드는 정렬을 나타냅니다.? 사용무작위 정렬을 나타낸다.
예를 들어, pubdate 필드의 정렬
ordering = ['pub_date']
pubdate 필드의 역순 정렬:
ordering = ['-pub_date']
먼저 pubdate의 역순으로 정렬한 다음 author의 정순으로 정렬합니다. 이렇게 쓰십시오.
ordering = ['-pub_date', 'author']
경고
정렬은 아무런 대가가 없는 조작이 아니다.ordering 속성에 추가된 필드마다 데이터베이스 비용이 발생합니다.네가 추가한 모든 외부 키도 기본 순서를 은밀하게 포함할 것이다.
permissions
Options.permissions
객체를 작성할 때 사용 권한 테이블에 추가된 사용 권한을 설정합니다.추가, 삭제 및 수정 권한은 각 모델에 대해 자동으로 생성됩니다.이 예는 추가 권한을 지정했습니다. candeliver_pizzas:
permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
이것은 (permission code, human readable permission name 형식의 2원조를 포함하는 원조 또는 목록입니다.
default_permissions
Options.default_permissions
Django 1.7 :
기본값은 ('add','change','delete')입니다.이 목록을 사용자 정의할 수 있습니다. 예를 들어, 기본 권한 중 하나가 필요하지 않으면 빈 목록으로 설정할 수 있습니다.모델이migrate 명령에 의해 생성되기 전에 이 속성은 누락된 속성이 생성되지 않도록 지정되어야 합니다.
proxy
Options.proxy
proxy = True의 경우 모델의 하위 클래스인 다른 모델이 프록시 모델로 간주됩니다.
select_on_save
Options.select_on_save
이 옵션은 Django가 1.6 이전 Django를 사용할지 여부를 결정합니다.db.models.Model.save () 알고리즘.이전 알고리즘은 SELECT를 사용하여 업데이트할 행이 있는지 여부를 판단합니다.새로운 알고리즘은 UPDATE를 직접 시도합니다.일부 작은 확률의 경우, 이미 존재하는 줄의 UPDATE 동작은 Django에게 보이지 않는다.예를 들어 PostgreSQL의 ON UPDATE 트리거는 NULL을 반환합니다.이 경우 새로운 알고리즘이 데이터베이스에 이미 존재하더라도 마지막에 INSERT 작업을 수행합니다.
보통 이 속성은 설정할 필요가 없습니다.기본값은 False입니다.
구식과 신식 두 가지 알고리즘에 관하여django를 참고하시오.db.models.Model.save().
unique_together
Options.unique_together
설정에 사용되는 반복되지 않는 필드 조합:
unique_together = (("driver", "restaurant"),)
그것은 하나의 원조의 원조로서 조합할 때 반드시 유일해야 한다.이것은 Django 백엔드에서 사용되며 데이터베이스 층에서 데이터를 제약합니다. (예를 들어 CREATE TABLE 문장에 UNIQUE 문장을 포함합니다.)
편의를 위해 단일 필드의 집합을 처리할 때uniquetogether는 1차원 원조일 수 있습니다:
unique_together = ("driver", "restaurant")
ManyToManyField는 unique 에 포함될 수 없습니다.투게더 중.(이것은 무엇을 의미하는지 분명하지 않다!)ManyToManyField 연관의 유일성을 확인하려면 신호나 명시적인 관통 모델(explicit through 모델)을 사용해 보십시오.
Django 1.7 :
unique_together , ValidationError 。
index_together
Options.index_together
색인이 있는 필드 조합을 설정할 수 있습니다.
index_together = [
["pub_date", "deadline"],
]
목록의 필드에 색인이 지정됩니다(예: CREATE INDEX 문에서 사용됨).
Django 1.7 :
편의를 위해 단일 필드의 집합을 처리할 때 indextogether는 1차원 목록일 수 있습니다.
index_together = ["pub_date", "deadline"]
verbose_name
Options.verbose_name
개체의 쉽게 이해할 수 있는 이름
verbose_name = "pizza"
만약 이 항목이 설정되지 않았다면, Django는 클래스 이름을 자술명으로 분리할 것입니다. 예를 들어 CamelCase는 Camelcase로 변할 것입니다.
verbose_name_plural
Options.verbose_name_plural
객체 복수 형식의 이름:
verbose_name_plural = "stories"
만약 이 항목이 설정되지 않았다면, Django는verbose 를 사용할 것입니다.name + "s".
역자: 비룡, 원문: 메타 옵션스.
본고는 CC BY-NC-SA 3.0 프로토콜로 발표되었으며 전재는 작가의 서명과 글의 출처를 보존해 주십시오.
Django 문서 협동 번역팀은 일손이 부족해서 관심 있는 친구가 우리에 가입할 수 있습니다. 완전 공익적입니다.교류군: 467338606.
만약 문장이 괜찮다고 생각한다면 아래의 QR코드를 스캔해서 나를 감상할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.