2011-06-27 17 views
7

Formu düzenliyorum, veri kaydettiğimde veriyi doğru şekilde yükler, veritabanına yeni giriş oluşturur. İşte Django'daki formun düzenlenmesi yeni örnek oluşturur

görünüm fonksiyonları

def create_account(request): 


    if request.method == 'POST': # If the form has been submitted... 
     form = AccountForm(request.POST, request.FILES) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
       form.save() 
       return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = AccountForm() # An unbound form 

    return render_to_response('account_form.html', { 
      'form': form, 
    }) 

olduğunu -

def edit_account(request, acc_id): 

    f = Account.objects.get(pk=acc_id) 
    if request.method == 'POST': # If the form has been submitted... 
     form = AccountForm(request.POST, request.FILES) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
       form.save() 
       return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = AccountForm(instance=f) # An unbound form 

    return render_to_response('account_form.html', { 
      'form': form, 
    }) 

gerçekten düzenleme ayrı işleve sahip ve silme ayırmak gerekir mi. i Böyle bir şey denediniz

<form action="/account/" method="post" enctype="multipart/form-data" > 
    {% csrf_token %} 
    {% for field in form %} 
     <div class="fieldWrapper"> 
      {{ field.errors }} 
      {{ field.label_tag }}: {{ field }} 
     </div> 
    {% endfor %} 
    <p><input type="submit" value="Send message" /></p> 
    </form> 
+0

Yani, diff işlevini kaydetmekten daha iyi kullanmalıyım? – user2134226

+0

lütfen S.Lott'in yorumunu dikkate almayın, doğru değil. –

cevap

11

Sen POST bölümünde instance argüman eksik. Bunun yerine

:

form = AccountForm(request.POST, request.FILES) # A form bound to the POST data 

Bu kullanmalıdır:

form = AccountForm(request.POST, request.FILES, instance=f) # A form bound to the POST data 

Eğer ekleme/düzenleme formuna aynı anda ekle/düzenle mümkün olacağını ekledikten sonra.

instance=None varsa ve instance gerçek bir hesap olup olmadığını günceller.

def edit_account(request, acc_id=None): 
    if acc_id: 
     f = Account.objects.get(pk=acc_id) 
    else: 
     f = None 

    if request.method == 'POST': # If the form has been submitted... 
     form = AccountForm(request.POST, request.FILES, instance=f) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      form.save() 
      return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = AccountForm(instance=f) # An unbound form 

    return render_to_response('account_form.html', { 
     'form': form, 
    }) 
+0

Üzgünüm arkadaşım hala kafam karıştı. 1) Düzenleme için tek bir fonksiyonun olduğu yerde kullanmam gereken kodu sağlayabiliyorum ve – user2134226

+0

'u ekleyeceğim. Herhangi bir argümanım yok ama düzenleme içinde argümanı geçmem gerekirse nasıl birleştirebilirim. Ayrıca düzenleme için farklı bir şablona ihtiyacım var o zaman ben form_account – user2134226

+0

için form eylemini değiştirmek gerekiyor bidu: Çalışmam gereken bir örnek ekledim :) – Wolph

1

bir fonksiyonu

şablonu tüm yapabilir mi?

# Create a form to edit an existing Object. 
    a = Account.objects.get(pk=1) 
    f = AccountForm(instance=a) 
    f.save() 

# Create a form to edit an existing Article, but use 
# POST data to populate the form. 
    a = Article.objects.get(pk=1) 
    f = ArticleForm(request.POST, instance=a) 
    f.save() 
İlgili konular