장고 모델 인스턴스의 여러 필드를 업데이트하는 방법은 무엇입니까?
장고에서 모델 인스턴스의 여러 필드를 업데이트하는 표준 방법은 무엇입니까? ... 필드가있는 모델이 있다면
Class foomodel(models.Model):
field1 = models.CharField(max_length=10)
field2 = models.CharField(max_length=10)
field3 = models.CharField(max_length=10)
...
... 주어진 하나의 필드로 인스턴스화 한 다음 별도의 단계에서 나머지 필드를 제공하고 싶습니다. 사전 또는 키 값 매개 변수를 전달하여 어떻게 수행합니까? 가능한?
즉, 해당 모델의 인스턴스에 쓰고 싶은 모든 것을 포함하는 데이터가 포함 된 사전이 있다고 가정 해 보겠습니다. 모델 인스턴스는 별도의 단계로 인스턴스화되었으며 아직 지속되지 않았다고 가정 해 보겠습니다. foo_instance.field1 = my_data_dict['field1']
각 필드에 대해 말할 수 있지만, 모델 인스턴스에서 모든 필드-값 쌍을 한 번에 전달하고 업데이트하는 메서드를 호출하는 방법이 있어야한다는 내용이 있습니다. 같은 것 foo_instance.update(my_data_dict)
. 이와 같은 기본 제공 메서드가 표시되지 않습니다. 누락되었거나 효율적으로 수행되는 방법은 무엇입니까?
나는 이것이 명백한 RTM 종류의 질문이라고 생각하지만 문서에서는 보지 못했습니다.
을 엉망으로 만들고 __dict__
싶지만 부모 클래스에서 상속 된 속성에는 적용되지 않습니다.
dict를 반복하여 객체에 할당 할 수 있습니다.
for (key, value) in my_data_dict.items():
setattr(obj, key, value)
또는 쿼리 세트에서 직접 수정할 수 있습니다 (쿼리 세트가 관심있는 객체 만 반환하는지 확인).
FooModel.objects.filter(whatever="anything").update(**my_data_dict)
이것을 시도해 볼 수 있습니다.
obj.__dict__.update(my_data_dict)
당신이하고 싶은 것은 자연스러워 보이지만 당신처럼 문서에서도 그것을 찾지 못했습니다. 문서는 모델에서 save () 하위 클래스를 만들어야한다고 말합니다. 그리고 그게 제가하는 일입니다.
def save(self, **kwargs):
mfields = iter(self._meta.fields)
mods = [(f.attname, kwargs[f.attname]) for f in mfields if f.attname in kwargs]
for fname, fval in mods: setattr(self, fname, fval)
super(MyModel, self).save()
기본 키의 이름을 가져 와서으로 필터링 Queryset.filter()
하고 업데이트하는 데 사용 Queryset.update()
합니다.
fooinstance = ...
# Find primary key and make a dict for filter
pk_name foomodel._meta.pk.name
filtr = {pk_name: getattr(fooinstance, pk_name)}
# Create a dict attribute to update
updat = {'name': 'foo', 'lastname': 'bar'}
# Apply
foomodel.objects.filter(**filtr).update(**updat)
이렇게하면 기본 키가 무엇이든 인스턴스를 업데이트 할 수 있습니다.
다음을 사용하여 업데이트 update()
Discussion.objects.filter(slug=d.slug)
.update(title=form_data['title'],
category=get_object_or_404(Category, pk=form_data['category']),
description=form_data['description'], closed=True)
참고 URL : https://stackoverflow.com/questions/1576664/how-to-update-multiple-fields-of-a-django-model-instance
'UFO ET IT' 카테고리의 다른 글
SVN은 LC_CTYPE 로케일을 설정할 수 없습니다. (0) | 2020.12.10 |
---|---|
연결 Java-MySql : 공개 키 검색이 허용되지 않습니다. (0) | 2020.12.10 |
R에서 ggplot2를 사용하여 날짜 이해 및 히스토그램 플로팅 (0) | 2020.12.09 |
JUnit 이론과 매개 변수화 된 테스트의 차이점 (0) | 2020.12.09 |
unique_ptr에는 유형 매개 변수로 deleter가 있지만 shared_ptr에는없는 이유는 무엇입니까? (0) | 2020.12.09 |