2011-06-30 23 views
6

Her create yönteminden sonra kaydetme yöntemi çağrılmalı mı yoksa create yöntemi mi çağırılıyor save yöntemini otomatik olarak çağırıyor mu?Kaydetme yöntemi Django'da ne zaman çağrılmalıdır?

Nesne oluşturulduktan sonra save yöntemi otomatik olarak çağrılırsa, save yöntemi için iyi bir kullanım durumu ne olurdu?

Teşekkürler. create() 'dan sonra çağrılmaya gerek yoktur.

cevap

8

için docs den

oluşturmak:

onun ardından bir nesne, normal bir şekilde oluşturmak yerine kullanılacak bir nesne oluşturmak ve bir adım

tüm içinde kaydetmek için uygun bir yol object.save() ile kaydetme

2

'dan başka bir yolla aldığınız bir nesneyi değiştirdiğinizde save yöntemi kullanılmalıdır, örneğin .objects.get . Aksi takdirde, değişiklikleriniz kaybolur.

1

Kayıt yöntemi için iyi bir kullanım gösteren örnek bir snippet. Bu, temel olarak gönderilen bir formdan veri alır ve daha sonra "sahnelerin ardında" ek bilgi ekler. İşte

#Model 
class Foo(models.Model): 
    field_one = models.CharField(max_length=10) 
    field_two = models.CharField(max_length=10) 
    field_three = models.CharField(max_length=10) 

#Form 
class FooForm(ModelForm): 
    class Meta: 
     model = Foo 
     exclude = ('field_three') #form will just show field_one and field_two 

#View 
def FooView(request): 
    if request.method == 'POST' 
     form = FooForm(request.POST) #gets field_one and two from form data 
     if form.is_valid(): 
      new_foo = form.save(commit = False) #doesn't actually save yet 
      new_foo.field_three = 'Foobar!' #add data to field_three 
      new_foo.save() #now it saves all 3 fields 
    else: 
     form = FooForm() 
    return #add some sort of http response here 

Kaydet (biraz daha bilgi ile Django Docs var) ve = işlemek False Ona senin örneğe benzer bir modele statik dize ekliyorsanız, gösterir fark bir aside- olarak

yanlış yapıyorsun. Ama fikir var haha.

İlgili konular