Django의 모델 업데이트 사용 방법 소개

5633 단어 #Django
모델 업데이트 일반 사용법 변경
만약 우리의 시계 구조가 이렇다면
class User(models.Model):
    username = models.CharField(max_length=255, unique=True, verbose_name='   ')
    is_active = models.BooleanField(default=False, verbose_name='    ')

그러면 사용자 이름과 상태를 수정하려면 다음 두 가지 방법을 사용할 수 있습니다.
방법1:
User.objects.filter(id=1).update(username='nick',is_active=True)

방법2:
_t = User.objects.get(id=1)
_t.username='nick'
_t.is_active=True
_t.save()

방법은 mysql 문장과 유사한 데이터 업데이트에 적합합니다 update user set username='nick' where id = 1방법2는 하나의 데이터를 갱신하기에 적합하고 하나의 데이터만 갱신할 수 있다. 단지 하나의 데이터만 갱신할 때 이 방법을 추천한다. 그리고 이 방법의 장점도 있다. 우리는 이어서 아래를 본다.
auto 있음now 속성 필드 업데이트
우리는 보통 테이블에 세 개의 기본 필드를 추가합니다. - 자증 ID입니다. 이django는 위에서 만든 테이블 문장처럼 기본값으로 추가되었습니다.username과 is 만 적혀 있지만.이 두 필드는 테이블이 작성된 후에도 기본적으로 자증 id 필드-창설 시간이 있습니다. 이 기록의 창설 시간을 표시하는 데 사용됩니다. auto_now_add 속성이 있습니다. 기록을 창설할 때 이 필드-수정 시간을 자동으로 채웁니다. 이 기록의 마지막 수정 시간을 표시하는 데 사용됩니다. auto_now 속성이 있습니다. 기록이 변할 때 이 필드를 채웁니다.
아래와 같은 시계 구조.
class User(models.Model):
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='    ')
    update_time = models.DateTimeField(auto_now=True, verbose_name='    ')
    username = models.CharField(max_length=255, unique=True, verbose_name='   ')
    is_active = models.BooleanField(default=False, verbose_name='    ')

표에 auto_now 속성이 있고 그가 자동으로 업데이트하기를 원할 때, 위의 방법 2의 업데이트를 사용해야 합니다. 그렇지 않으면 autonow 필드는 업데이트되지 않습니다. 즉,
_t = User.objects.get(id=1)
_t.username='nick'
_t.is_active=True
_t.save()

json/dict 형식 데이터 업데이트 필드
현재 주류의 웹 개방 방식은 모두 전후단 분리를 중시하고 분리 후 전후단 상호작용의 데이터 형식은 대부분 통용되는 json형을 사용한다. 그러면 어떻게 최소한의 코드로 편리하게 json 형식의 데이터를 데이터베이스에 업데이트합니까?다음과 같은 두 가지 방법을 사용할 수 있습니다.
방법1:
data = {'username':'nick','is_active':'0'}
User.objects.filter(id=1).update(**data)
  • 마찬가지로 이런 방법은 auto_now 속성 필드가 있는 값을 자동으로 업데이트할 수 없다
  • 일반적으로 우리는 변수를 추가하기 전에 별표(*)를 하나 더하면 이 변수가 원조/목록이고 두 개의 별표를 더하면 이 파라미터가 사전임을 나타낸다
  • 방법2:
    data = {'username':'nick','is_active':'0'}
    _t = User.objects.get(id=1)
    _t.__dict__.update(**data)
    _t.save()
  • 메소드 2와 메소드 1은 필드의 값을 자동으로 업데이트할 수 없음auto_now
  • 여기에 __dict__ 방법이 사용되었음을 주의하라
  • 방법 3:
    _t = User.objects.get(id=1)
    _t.role=Role.objects.get(id=3)
    _t.save()

    ForeignKey 필드 업데이트
    만약 우리 테이블에 Foreignkey 외키가 있다면 어떻게 업데이트해야 합니까?
    class User(models.Model):
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='    ')
        update_time = models.DateTimeField(auto_now=True, verbose_name='    ')
        username = models.CharField(max_length=255, unique=True, verbose_name='   ')
        is_active = models.BooleanField(default=False, verbose_name='    ')
        role = models.ForeignKey(Role, on_delete=models.CASCADE, null=True, verbose_name='  ')

    방법1:
    User.objects.filter(id=1).update(role=2)
  • 가장 간단한 방법은 Role 필드에 하나의 id로 설정하면 됩니다
  • 물론 dict를 매개 변수로 업데이트할 수도 있다.
  • User.objects.filter(id=1).update(**{'username':'nick','role':3})

    방법2:
    _role = Role.objects.get(id=2)
    User.objects.filter(id=1).update(role=_role)
  • 로엘
  • 에게도 하나의 실례를 부여할 수 있다.
  • 물론 dict를 매개 변수로 업데이트할 수도 있다.
  • _role = Role.objects.get(id=1)
    User.objects.filter(id=1).update(**{'username':'nick','role':_role})

    방법 3:
    _t = User.objects.get(id=1)
    _t.role=Role.objects.get(id=3)
    _t.save()
  • 주의: 여기 있는 Role는 반드시 하나의 대상으로 값을 부여해야 하며 id를 쓸 수 없습니다. 그렇지 않으면 오류가 발생"User.role" must be a "Role" instance
  • dict를 매개 변수로 업데이트할 때 다음과 같은 코드가 조금 다르다.
  • _t = User.objects.get(id=1)
    _t.__dict__.update(**{'username':'nick','role_id':2})
    _t.save()
  • Foreignkey 외부 키는 _id를 추가해야 합니다. 예를 들어 {'role id': 3}
  • role_id 뒤에는 id (int나str 형식 모두 가능) 를 따라야 하며, Role 실례
  • 를 따라갈 수 없습니다.
    ManyToManyField 필드 업데이트
    만약에 우리 테이블에 Many ToMany Field 필드가 있을 때 업데이트는 어떤 영향을 줍니까?
    class User(models.Model):
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='    ')
        update_time = models.DateTimeField(auto_now=True, verbose_name='    ')
        username = models.CharField(max_length=255, unique=True, verbose_name='   ')
        is_active = models.BooleanField(default=False, verbose_name='    ')
        role = models.ForeignKey(Role, on_delete=models.CASCADE, null=True, verbose_name='  ')
        groups = models.ManyToManyField(Group, null=True, verbose_name=' ')

    m2m 업데이트: m2m 필드는 직접 업데이트하는 방법이 없습니다. 비우고 추가하는 방법으로만 업데이트할 수 있습니다.
    _t = User.objects.get(id=1)
    _t.groups.clear()
    _t.groups.add(*[1,3,5])
    _t.save()
  • add(): m2m 필드에 값을 추가합니다. 여러 값이 있을 때 목록을 사용할 수 있습니다. 위의 예를 참조하십시오.
  • _t.groups.add(2)
  • _t.groups.add(Group.objects.get(id=2))

  • remove(): m2m 필드에서 하나의 값을 제거하고 여러 값이 있을 때 목록을 사용할 수 있습니다. 위의 예를 참조하십시오.
  • _t.groups.remove(2)
  • _t.groups.remove(Group.objects.get(id=2))

  • clear(): m2m 필드의 값 지우기
  • 좋은 웹페이지 즐겨찾기