03 Django 모델 레이어: 일반(일반) 필드 및 매개변수

15120 단어
Django 모델 레이어:일반(일반) 필드 및 매개변수
1 ORM 필드
AutoField
int 자동 증열, 매개 변수primary 를 입력해야 합니다key=True.모델에 자증열이 없으면 자동으로 id라는 열을 만들 것입니다.
IntegerField
범위는 -2147483648 to 2147483647입니다.
CharField
문자 유형, max 필요length 매개 변수, maxlength는 문자 길이를 나타냅니다.
DateField
날짜 필드, 날짜 형식 YYYY-MM-DD는 Python의datetime에 해당합니다.date() 인스턴스.
DateTimeField
날짜 시간 필드, 형식 YYYY-MM-DD HH:MM[:ss[.uuuuuuu]][TZ], 파이톤의 날짜 시간에 해당합니다.datetime() 인스턴스
일반 및 비상용 필드
상용 및 비상용 필드 집합
AutoField(Field)

        - int   ,       primary_key=True



    BigAutoField(AutoField)

        - bigint   ,       primary_key=True



         : model        ,           id  

        from django.db import models



        class UserInfo(models.Model):

            #          id         

            username = models.CharField(max_length=32)



        class Group(models.Model):

            #       

            nid = models.AutoField(primary_key=True)

            name = models.CharField(max_length=32)



    SmallIntegerField(IntegerField):

        -     -32768 ~ 32767



    PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)

        -      0 ~ 32767

    IntegerField(Field)

        -    (    ) -2147483648 ~ 2147483647



    PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)

        -     0 ~ 2147483647



    BigIntegerField(IntegerField):

        -    (    ) -9223372036854775808 ~ 9223372036854775807



    BooleanField(Field)

        -      



    NullBooleanField(Field):

        -         



    CharField(Field)

        -     

        -     max_length  , max_length      



    TextField(Field)

        -     



    EmailField(CharField):

        -      ,Django Admin  ModelForm       



    IPAddressField(Field)

        -      ,Django Admin  ModelForm      IPV4   



    GenericIPAddressField(Field)

        -      ,Django Admin  ModelForm      Ipv4 Ipv6

        -   :

            protocol,    Ipv4 Ipv6, 'both',"ipv4","ipv6"

            unpack_ipv4,      True,   ::ffff:192.0.2.1  ,    192.0.2.1,     ,  protocol="both"



    URLField(CharField)

        -      ,Django Admin  ModelForm      URL



    SlugField(CharField)

        -      ,Django Admin  ModelForm          、  、   、   (  )



    CommaSeparatedIntegerField(CharField)

        -      ,            



    UUIDField(Field)

        -      ,Django Admin  ModelForm    UUID     



    FilePathField(Field)

        -    ,Django Admin  ModelForm              

        -   :

                path,                           

                match=None,                    

                recursive=False,                   

                allow_files=True,              

                allow_folders=False,            



    FileField(Field)

        -    ,        ,         

        -   :

            upload_to = ""               

            storage = None          ,  django.core.files.storage.FileSystemStorage



    ImageField(FileField)

        -    ,        ,         

        -   :

            upload_to = ""               

            storage = None          ,  django.core.files.storage.FileSystemStorage

            width_field=None,                   (   )

            height_field=None                   (   )



    DateTimeField(DateField)

        -   +     YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]



    DateField(DateTimeCheckMixin, Field)

        -           YYYY-MM-DD



    TimeField(DateTimeCheckMixin, Field)

        -           HH:MM[:ss[.uuuuuu]]



    DurationField(Field)

        -    ,    ,      bigint  ,ORM      datetime.timedelta  



    FloatField(Field)

        -    



    DecimalField(Field)

        - 10    

        -   :

            max_digits,     

            decimal_places,     



    BinaryField(Field)

        -      

ORM 필드와 데이터베이스 실제 필드의 대응 관계
    :

    'AutoField': 'integer AUTO_INCREMENT',

    'BigAutoField': 'bigint AUTO_INCREMENT',

    'BinaryField': 'longblob',

    'BooleanField': 'bool',

    'CharField': 'varchar(%(max_length)s)',

    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',

    'DateField': 'date',

    'DateTimeField': 'datetime',

    'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',

    'DurationField': 'bigint',

    'FileField': 'varchar(%(max_length)s)',

    'FilePathField': 'varchar(%(max_length)s)',

    'FloatField': 'double precision',

    'IntegerField': 'integer',

    'BigIntegerField': 'bigint',

    'IPAddressField': 'char(15)',

    'GenericIPAddressField': 'char(39)',

    'NullBooleanField': 'bool',

    'OneToOneField': 'integer',

    'PositiveIntegerField': 'integer UNSIGNED',

    'PositiveSmallIntegerField': 'smallint UNSIGNED',

    'SlugField': 'varchar(%(max_length)s)',

    'SmallIntegerField': 'smallint',

    'TextField': 'longtext',

    'TimeField': 'time',

    'UUIDField': 'char(32)',

2 ORM 필드 매개변수
null
어떤 필드가 비어 있을 수 있음을 나타냅니다.
unique
unique=True로 설정하면 이 필드는 이 테이블에서 유일해야 합니다.
db_index
만약dbindex=True는 이 필드에 대한 색인을 설정합니다.
default
이 필드의 기본값을 설정합니다.
DateField 및 DateTimeField
auto_now_add
auto 구성now_add=True, 데이터 기록을 만들 때 현재 시간을 데이터베이스에 추가합니다.
auto_now
구성에서 autonow=True, 데이터 로깅이 업데이트될 때마다 이 필드가 업데이트됩니다.알아보다
null                            

    db_column                    

    db_tablespace

    default                       

    primary_key                    

    db_index                          

    unique                              

    unique_for_date           【  】            

    unique_for_month          【 】            

    unique_for_year           【 】            



    verbose_name        Admin        

    blank               Admin           

    editable            Admin       

    help_text           Admin         

    choices             Admin         ,                    

                         :gf = models.IntegerField(choices=[(0, '  '),(1, '   '),],default=1)



    error_messages             (    ),             ;

                           :null, blank, invalid, invalid_choice, unique, and unique_for_date

                         :{'null': "    .", 'invalid': '    '}



    validators                 (    ),           

                        from django.core.validators import RegexValidator

                        from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\

                        MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator

                         :

                            test = models.CharField(

                                max_length=32,

                                error_messages={

                                    'c1': '     1',

                                    'c2': '     2',

                                    'c3': '     3',

                                },

                                validators=[

                                    RegexValidator(regex='root_\d+', message='   ', code='c1'),

                                    RegexValidator(regex='root_112233\d+', message='    ', code='c2'),

                                    EmailValidator(message='    ', code='c3'), ]

                            )

3 관계 필드
ForeignKey
외키 형식은 ORM에서 외키 관련 관계를 나타내는 데 사용되며, 일반적으로ForeignKey 필드를 '일대다' 중 '다수' 측에 설정합니다.ForeignKey는 다른 테이블과 관계를 맺을 수도 있고 자신과 관계를 맺을 수도 있습니다.
to
연관시킬 테이블 설정하기
to_field
연관시킬 테이블의 필드 설정
related_name
역방향 작업 시 사용된 필드 이름, 원래 역방향 조회를 대체할 때의 '테이블 이름set'. 예를 들면 다음과 같습니다.
class Classes(models.Model):

    name = models.CharField(max_length=32)



class Student(models.Model):

    name = models.CharField(max_length=32)

    theclass = models.ForeignKey(to="Classes")

특정 학급과 관련된 모든 학생(역방향 조회)을 조회할 때 우리는 이렇게 쓴다.
models.Classes.objects.first().student_set.all()

ForeignKey 필드에 related 매개 변수를 추가하면name 이후,
class Student(models.Model):

    name = models.CharField(max_length=32)

    theclass = models.ForeignKey(to="Classes", related_name="students")

특정 학급과 관련된 모든 학생(역방향 조회)을 조회할 때 우리는 이렇게 쓴다.
models.Classes.objects.first().students.all()

related_query_name
역방향 조회 작업을 할 때, 사용하는 연결 접두사, 테이블 이름을 바꾸는 데 사용합니다.
on_delete
연관 테이블의 데이터를 삭제할 때 현재 테이블과 연관된 행의 동작입니다.  models.CASCADE 연관 데이터 삭제 및 연관도 삭제
  models.DO_NOTHING 연관 데이터를 삭제하여 Integrity Error 오류 발생
  models.PROTECT에서 관련 데이터를 삭제하여 ProtectedError 오류 발생
  models.SET_NULL은 연관된 데이터를 삭제하고 연관된 값을 null로 설정합니다. 사전 요구 사항은 FK 필드가 비어 있어야 합니다.
  models.SET_DEFAULT 는 연관된 데이터를 삭제하고 연관된 값을 기본값으로 설정합니다. (전제 FK 필드는 기본값을 설정해야 합니다)
  models.SET는 관련 데이터를 삭제합니다. a. 이와 관련된 값은 지정된 값으로 설정하고 설정은 models입니다.SET(값) b. 이와 관련된 값은 실행 가능한 대상의 되돌아오는 값으로 설정하고 설정: models.SET(실행 가능한 객체)
def func():

    return 10



class MyModel(models.Model):

    user = models.ForeignKey(

        to="User",

        to_field="id",

        on_delete=models.SET(func)

    )

db_constraint
데이터베이스에 키 제약조건을 만들 지 여부입니다. 기본값은 True입니다.
OneToOneField
일대일 필드.일반적으로 일대일 필드는 기존의 필드를 확장하는 데 쓰인다.일대일의 관련 관계는 한 테이블의 서로 다른 필드에서 조회 빈도가 너무 큰 상황에서 한 테이블에 저장할 수 있는 필드를 분리하여 두 테이블에 놓은 다음에 두 테이블을 일대일의 관련 관계를 맺는 데 많이 쓰인다.
class Author(models.Model):

    name = models.CharField(max_length=32)

    info = models.OneToOneField(to='AuthorInfo')

    



class AuthorInfo(models.Model):

    phone = models.CharField(max_length=11)

    email = models.EmailField()

to
연관시킬 테이블을 설정합니다.
to_field
연관시킬 필드를 설정합니다.
on_delete
ForeignKey 필드와 같습니다.
ManyToManyField
다대다의 연관 관계를 나타내는 데 쓰인다.데이터베이스에서 세 번째 표를 통해 관련 관계를 맺다
to
연관시킬 테이블 설정하기
related_name
ForeignKey 필드와 같습니다.
related_query_name
ForeignKey 필드와 같습니다.
symmetrical
여러 쌍이 서로 연관된 경우에만 내부적으로 역작업을 작성할지 여부를 지정하는 필드입니다.기본값은 True입니다.예를 들면 다음과 같습니다.
class Person(models.Model):

    name = models.CharField(max_length=16)

    friends = models.ManyToManyField("self")

이때, 개인 대상은 개인이 없습니다.set 속성.
class Person(models.Model):

    name = models.CharField(max_length=16)

    friends = models.ManyToManyField("self", symmetrical=False)

이때, 개인 대상은 현재 개인을 사용할 수 있습니다set 속성은 역방향 조회를 진행합니다.
through
ManyToManyField 필드를 사용할 때 Django는 자동으로 테이블을 생성하여 다중 연관 관계를 관리합니다.그러나 우리는 수동으로 세 번째 표를 만들어서 다대다 관계를 관리할 수 있다. 이때through를 통해 세 번째 표의 이름을 지정해야 한다.
through_fields
연관된 필드를 설정합니다.
db_table
기본적으로 세 번째 테이블을 만들 때 데이터베이스에 있는 테이블의 이름입니다.
4 다대다 연관 관계의 세 가지 방식
방식 1: 스스로 세 번째 표를 만든다
class Book(models.Model):

    title = models.CharField(max_length=32, verbose_name="  ")





class Author(models.Model):

    name = models.CharField(max_length=32, verbose_name="    ")





#         ,            

class Author2Book(models.Model):

    author = models.ForeignKey(to="Author")

    book = models.ForeignKey(to="Book")



    class Meta:

        unique_together = ("author", "book")

방법 2: ManyToManyField를 통해 세 번째 테이블 자동 작성
class Book(models.Model):

    title = models.CharField(max_length=32, verbose_name="  ")





#   ORM   ManyToManyField        

class Author(models.Model):

    name = models.CharField(max_length=32, verbose_name="    ")

    books = models.ManyToManyField(to="Book", related_name="authors")

방법 3: ManyTomanyField를 설정하고 직접 만든 세 번째 테이블을 지정합니다.
class Book(models.Model):

    title = models.CharField(max_length=32, verbose_name="  ")





#         ,   ManyToManyField    

class Author(models.Model):

    name = models.CharField(max_length=32, verbose_name="    ")

    books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))

    # through_fields    2  ('field1','field2'):

    #   field1   ManyToManyField       (author),field2       (book)    。





class Author2Book(models.Model):

    author = models.ForeignKey(to="Author")

    book = models.ForeignKey(to="Book")



    class Meta:

        unique_together = ("author", "book")

주의: 세 번째 관계표에 추가 필드를 저장해야 할 때 세 번째 방식을 사용해야 합니다.그러나 우리가 세 번째 방식으로 다대다 관련 관계를 만들 때 set,add,remove,clear 방법으로 다대다 관계를 관리할 수 없기 때문에 세 번째 표의 모델을 통해 다대다 관계를 관리해야 한다.
5원 정보
ORM에 대응하는 클래스에는 또 다른 메타 클래스가 포함되어 있고 메타 클래스는 일부 데이터베이스 정보를 봉인한다.기본 필드는 다음과 같습니다.
db_table
ORM의 데이터베이스에 있는 테이블 이름은 기본적으로 app 입니다.클래스 이름,db테이블은 테이블 이름을 다시 쓸 수 있습니다.
index_together
연합 색인.
unique_together
유일한 색인을 연합하다.
ordering
기본값으로 정렬할 필드를 지정합니다.이 속성을 설정해야만 우리가 검색한 결과가reverse () 될 수 있습니다.이해하다.
class UserInfo(models.Model):

        nid = models.AutoField(primary_key=True)

        username = models.CharField(max_length=32)



        class Meta:

            #               app   +     +   

            db_table = "table_name"



            #     

            index_together = [

                ("pub_date", "deadline"),

            ]



            #       

            unique_together = (("driver", "restaurant"),)

            

            ordering = ('name',)

            

            # admin       

            verbose_name='  '



            # verbose_name s

            verbose_name_plural=verbose_name

6 사용자 지정 필드(이해)
사용자 지정 char 유형 필드:
class FixedCharField(models.Field):

    """

        char      

    """

    def __init__(self, max_length, *args, **kwargs):

        self.max_length = max_length

        super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)



    def db_type(self, connection):

        """

                      char,   max_length    

        """

        return 'char(%s)' % self.max_length





class Class(models.Model):

    id = models.AutoField(primary_key=True)

    title = models.CharField(max_length=25)

    #       char     

    cname = FixedCharField(max_length=25)

좋은 웹페이지 즐겨찾기