2011-05-04 4 views
2

기존 Django 모델 객체의 여러 필드에 값을 설정하는 가장 좋은 방법을 알고 싶습니다. 나는 많은 분야가 포함 된 모델이 있습니다 또한Django Db 레코드에 여러 필드를 설정하는 방법

class Foo(models.Model): 
    Field1 = models.CharField(max_length=40) 
    Field2 = models.CharField(max_length=40) 
    Field3 = models.CharField(max_length=40) 
    etc... 

을 나는이 사전에 특정 레코드에 대한 해당 필드의 부분 집합을 변경 포함 :

data = {'field1': 'value1', 'field5': 'value5', 'field7': 'value7'} 
record = Foo.objects.get(pk=1) 

내가 함께 record의 필드를 설정할을 새 값은 data입니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 사전을 풀고 레코드의 해당 필드를 수정하는 방법이 있습니까? 이런 있나요

entry.set_values(**data) 

또는 내가 잘못된 길을 갈거야 :

for k, v in data.iteritems(): 
    setattr(entry, k, v) 
entry.save() 
내가 좋아하는 뭔가를 호출 할 수있는 방법이있을 수 있습니다 생각

: 내가 사용하는 사전을 반복 할 수 있습니다 실현 ?

답변

5

나는이 나 자신을 테스트하지 않은 있지만, 해당 검색어 세트의 API에서 .update를() 함수에 DICT를 전달할 수 있습니다 https://docs.djangoproject.com/en/2.0/ref/models/querysets/#update

Foo.objects.get(pk=1).update(**data) 
+3

업데이트 검색어 세트에서만 사용할 수 있지만이 작품 Foo.objects .filter (pk = 1) .update (** 데이터). 제안 해 주셔서 감사합니다. –

+1

저장 관련 신호가 발생하지 않으며 인스턴스에서 .save()를 호출하지 않습니다. 이는 원하는 상황이거나 거래 차단 자일 수 있습니다. 'Foo.objects.filter (pk = 1) .update (** date);를 할 수 있습니다. 이 작업이 필요할 경우 Foo.objects.get (pk = 1) .save()를 실행하십시오. –

+0

좋은 캐치 브라이언! – Brandon

관련 문제