Câu trả lời:
Sử dụng phương thức đối tượngupdate
queryset :
MyModel.objects.filter(pk=some_value).update(field1='some value')
update
phương pháp là rất tốt cho cập nhật tin đại chúng, nhưng nó phải đặt ra một cảnh báo trong đầu của bạn khi bạn sử dụng nó mà bạn cần phải xem xét bất kỳ tín hiệu gắn liền với đối tượng đó cũng có thể cần phải được tự bắn
MyModel.objects.filter(pk=some_value).update(field1=self.data)
Các đối tượng cơ sở dữ liệu Django sử dụng cùng một phương thức save () để tạo và thay đổi các đối tượng.
obj = Product.objects.get(pk=pk)
obj.name = "some_new_value"
obj.save()
Làm thế nào Django biết CẬP NHẬT so với INSERT
Nếu thuộc tính khóa chính của đối tượng được đặt thành giá trị ước tính là True (nghĩa là một giá trị không phải là Không hoặc chuỗi rỗng), Django thực hiện CẬP NHẬT. Nếu thuộc tính khóa chính của đối tượng không được đặt hoặc nếu CẬP NHẬT không cập nhật bất cứ điều gì, Django sẽ thực thi một INSERT.
Tham khảo: https://docs.djangoproject.com/en/1.9/ref/models/instances/
Câu trả lời này so sánh hai cách tiếp cận trên. Nếu bạn muốn cập nhật nhiều đối tượng trong một dòng, hãy truy cập:
# Approach 1
MyModel.objects.filter(field1='Computer').update(field2='cool')
Nếu không, bạn sẽ phải lặp lại bộ truy vấn và cập nhật các đối tượng riêng lẻ:
#Approach 2
objects = MyModel.objects.filter(field1='Computer')
for obj in objects:
obj.field2 = 'cool'
obj.save()
Cách tiếp cận 1 nhanh hơn bởi vì, nó chỉ tạo một truy vấn cơ sở dữ liệu, so với cách tiếp cận 2 tạo ra các truy vấn cơ sở dữ liệu 'n + 1'. (Đối với n mục trong bộ truy vấn)
Cách tiếp cận nắm tay thực hiện một truy vấn db tức là CẬP NHẬT, cách thứ hai thực hiện hai: CHỌN và sau đó CẬP NHẬT.
Sự đánh đổi là, giả sử bạn có bất kỳ trình kích hoạt nào, như cập nhật updated_on
hoặc bất kỳ trường nào liên quan như vậy, nó sẽ không được kích hoạt khi cập nhật trực tiếp tức là cách tiếp cận 1.
Cách tiếp cận 1 được sử dụng trên một bộ truy vấn, vì vậy có thể cập nhật nhiều đối tượng cùng một lúc, không phải trong trường hợp của cách tiếp cận 2.
Chỉ trong một trường hợp trong serializer
mọi thứ, bạn có thể cập nhật theo cách rất đơn giản!
my_model_serializer = MyModelSerializer(
instance=my_model, data=validated_data)
if my_model_serializer.is_valid():
my_model_serializer.save()
chỉ trong một trường hợp trong form
những điều!
instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
Django form
là từ Django thích hợp.
update
phương thức như thế này thì mọi tín hiệu được gắn vào mô hình đó hoặc "công cụ mã" khác sẽ không chạy với các đối tượng. Chỉ là một con trỏ từ một người đã bị đốt cháy :)