Yanıtlar:
Sorgu kümesi nesne update
yöntemini kullanın :
MyModel.objects.filter(pk=some_value).update(field1='some value')
update
Yöntem kütle güncellemeleri için harika ama bu size ateş el ile de olması gerekir diye nesneye bağlı herhangi sinyalleri incelememiz gerekmektedir kullanmak kafanın içinde bir uyarı yola gerektiğini
MyModel.objects.filter(pk=some_value).update(field1=self.data)
Django veritabanı nesneleri, nesneleri oluşturmak ve değiştirmek için aynı save () yöntemini kullanır.
obj = Product.objects.get(pk=pk)
obj.name = "some_new_value"
obj.save()
Django, GÜNCELLEME ve INSERT'i nasıl bilir
Nesnenin birincil anahtar niteliği True olarak değerlendirilen bir değere ayarlanırsa (yani, Yok veya boş dizeden farklı bir değer), Django bir GÜNCELLEME yürütür. Nesnenin birincil anahtar niteliği ayarlanmamışsa veya GÜNCELLEME hiçbir şeyi güncellemediyse, Django bir INSERT yürütür.
Referans: https://docs.djangoproject.com/en/1.9/ref/models/instances/
Bu cevap, yukarıdaki iki yaklaşımı karşılaştırır. Çok sayıda nesneyi tek bir satırda güncellemek istiyorsanız, şunu gidin:
# Approach 1
MyModel.objects.filter(field1='Computer').update(field2='cool')
Aksi takdirde, sorgu kümesini yinelemeniz ve tek tek nesneleri güncellemeniz gerekir:
#Approach 2
objects = MyModel.objects.filter(field1='Computer')
for obj in objects:
obj.field2 = 'cool'
obj.save()
Yaklaşım 1 daha hızlıdır çünkü, 'n + 1' veritabanı sorguları yapan yaklaşım 2'ye kıyasla yalnızca bir veritabanı sorgusu yapar. (Sorgu kümesindeki n öğe için)
İlk yaklaşım bir db sorgusu yapar, yani UPDATE, ikincisi iki tane yapar: SELECT ve ardından UPDATE.
Takas, güncelleme updated_on
veya benzeri ilgili alanlar gibi herhangi bir tetikleyiciniz olduğunu varsayalım , doğrudan güncellemede, yani yaklaşım 1'de tetiklenmeyecek.
Yaklaşım 1, bir sorgu kümesinde kullanılır, bu nedenle, yaklaşım 2 durumunda değil, aynı anda birden çok nesneyi güncellemek mümkündür.
sadece bir durumda serializer
, çok basit bir şekilde güncelleme yapabilirsiniz!
my_model_serializer = MyModelSerializer(
instance=my_model, data=validated_data)
if my_model_serializer.is_valid():
my_model_serializer.save()
sadece bir form
şeylerde bir durumda !
instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
Django form
Django Proper'dan.
update
yöntemi kullanırsanız, o modele veya diğer "kod maddelerine" eklenen herhangi bir sinyal nesnelere karşı çalışmayacaktır. Yanmış birinden sadece bir işaret :)