IT

장고 업데이트 객체

lottoking 2020. 8. 5. 07:38
반응형

장고 업데이트 객체


하나는 객체를 선택하고 다른 하나는 객체를 업데이트하기 위해 두 개의 쿼리를 수행하지 않고 동일한 세트에서 업데이트하고 어떻게 실행 실행하고 있습니까?

SQL에서 동등한 것은 다음과 같습니다.

update my_table set field_1 = 'some value' where pk_field = some_value

queryset 메소드 update 사용하십시오 .

MyModel.objects.filter(pk=some_value).update(field1='some value')

Django 데이터베이스 객체는 객체를 생성하고 변경하기 위해 동일한 save () 메소드를 사용합니다.

obj = Product.objects.get(pk=pk)
obj.name = "some_new_value"
obj.save()

Django가 UPDATE vs. INSERT를 아는 방법
의 기본 키 속성이 True로 평가되는 값 (예 : None 이외의 값 또는 빈 공유)으로 설정 널 Django는 UPDATE를 실행합니다. 객체의 기본 키 속성이 설정되어 있지 않을 UPDATE가 업데이트되지 않습니다. jango는 INSERT를 실행합니다.

참조 : https://docs.djangoproject.com/en/1.9/ref/models/instances/


이 답변은 위의 두 가지가를 비교합니다. 한 줄에 많은 것을 업데이트 할 수 있습니다.

# Approach 1
MyModel.objects.filter(field1='Computer').update(field2='cool')

국제적 객체 쿼리 세트를 반복하고 객체를 업데이트해야합니다.

#Approach 2    
objects = MyModel.objects.filter(field1='Computer')
for obj in objects:
    obj.field2 = 'cool'
    obj.save()

  1. 1은 'n + 1'데이터베이스 쿼리를 만드는 2에 비해 하나의 데이터베이스 쿼리 만 만들기 때문에 더 빠 사용합니다. (쿼리 세트의 n 개 항목의 경우)

  2. 주먹은 하나의 db 쿼리, 즉 UPDATE를 만들고 두 번째 방법은 SELECT와 UPDATE를 만듭니다.

  3. 취약은 업데이트 updated_on또는 이와 관련된 필드와 같은 트리거가 가정하면 직접 업데이트 즉, 접근 1에서는 트리거되지 않습니다.

  4. 1은 쿼리 세트에서 사용 가능합니다. 2의 경우가 아니라 여러 오브젝트를 한 번에 업데이트 할 수 있습니다.


serializer사물 의 경우에만 매우 간단한 방법으로 업데이트 할 수 있습니다!

my_model_serializer = MyModelSerializer(
    instance=my_model, data=validated_data)
if my_model_serializer.is_valid():

    my_model_serializer.save()

form사물 의 경우에만 !

instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
    form.save()

참고 URL : https://stackoverflow.com/questions/2712682/django-update-object

반응형