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
속성 필드가 있는 값을 자동으로 업데이트할 수 없다data = {'username':'nick','is_active':'0'}
_t = User.objects.get(id=1)
_t.__dict__.update(**data)
_t.save()
auto_now
__dict__
방법이 사용되었음을 주의하라_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)
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)
_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()
"User.role" must be a "Role" instance
_t = User.objects.get(id=1)
_t.__dict__.update(**{'username':'nick','role_id':2})
_t.save()
_id
를 추가해야 합니다. 예를 들어 {'role id': 3}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 필드에 값을 추가합니다. 여러 값이 있을 때 목록을 사용할 수 있습니다. 위의 예를 참조하십시오.remove()
: m2m 필드에서 하나의 값을 제거하고 여러 값이 있을 때 목록을 사용할 수 있습니다. 위의 예를 참조하십시오.clear()
: m2m 필드의 값 지우기이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.