2016-03-28 23 views
1

created_at alanı olan bir İstemci modelim var. Bir istemci için shell'den create_at'ı güncellemek istiyorum. Ben c = Client.object.get(id=1) ile aynı şeyi yaptığındaDjango Queryset erişim dizin adına göre

>>> c = Client.objects.all() 
>>> c[1].created_at 
>>> # I get nothing here since it's not set yet 
>>> from django.utils import timezone 
>>> c[1].created_at = timezone.now() 
>>> c[1].save() 
>>> c[1].created_at 
>>> # I still get nothing here. Even when I reload the queryset, I get nothing. 

Ancak, çalışır: Aşağıdaki yaptı. Bu neden oluyor?

cevap

4

Bunu kendi istance için QuerySet nesne atamak gerekir ve daha sonra da yukarıdaki yapıyoruz sadece QuerySet et

c = Client.objects.all() 
obj = c[1] 
obj.created_at = timezone.now() 
obj.save() 
+0

Teşekkür düzenliyor, kurtaracak, evet onlar olur. Neden olsa bu oluyor? Kafam çok karışık. –

+0

çünkü bir Queryset'teki nesneler belleğe kaydedilmez ve queryset nesnelerin yalnızca bir kopyasıdır. Gerçek nesneyi (yani, onu güncelleyebilmek ve kaydedebilmek için) almak için, onu – awwester

+0

belleğinde bir değişkene atamanız gerekir. çünkü her dilim işlemi veritabanına yeni bir sorgu yapar ve yeni bir nesne döndürür. Böylece ilk 'c [1]' sonrakilere bağlı değildir. –