2010-03-06 49 views
2

嘿,我已經搜索過,做這個(特別是這個問:Django edit form based on add form?),但我不能得到它的工作。如何使用相同的django表單編輯/添加對象?

我遇到的問題是表單總是會創建一個新的對象,而不是修改現有的對象。

這是我的代碼:

def new_task(request, task_id=None): 

if task_id is not None: 
    task = Task.objects.get(pk=task_id) 
else: 
    task = Task() 

if request.method == 'POST': # If the form has been submitted... 
    form = TaskForm(request.POST, instance=task) 
    if form.is_valid(): 
     form.save(); 
     return tasks(request, 'Task #%s created successfully.' % (task.id)) 
else: 
    form = TaskForm(instance=task) 

return custom_render('user/new_task.html', 
        {'form': form}, 
        request); 

對我失去了我任何線索?謝謝

編輯:添加表單定義。

class TaskForm(ModelForm): 

description = CharField(max_length = 1500, 
    widget= forms.Textarea(attrs={'class':'task-description'}), 
    required=True) 

class Meta: 
    model = Task 
+0

只是爲了添加更多信息,表單在編輯時會正確填充對象的數據,添加新表單時顯示爲空。除此問題之外,所有正常工作。 – Nacho 2010-03-06 22:04:57

+0

你是否覆蓋了表單保存方法?你能顯示錶單的定義嗎? – 2010-03-06 22:34:58

+0

我剛剛添加了表單def。不,我沒有覆蓋保存方法... – Nacho 2010-03-06 22:45:05

回答

4

好吧,經過一個愉快的夜晚調試,我發現問題是什麼。實際上很愚蠢。 問題在於提交時,task_id是None。

我算出來做:

  1. 在我補充形式:<form action="{% url App.myapp.views.new_task **task_id** %}"
  2. 對我的看法我補充說:

    回報custom_render( '用戶/ new_task.html', {'form':form,'submit':提交,'task_id':task.id}, 請求)

就是這樣。一個新手的錯誤。如果有人知道更好的方式,我願意接受建議。

+2

呃 - 我*想*如果你離開的動作屬性,那麼它只會提交回相同的URL和視圖將拿起task_id – Ryan 2011-01-19 01:22:29

+1

答案和你的評論都是有用的。我最後說了你的評論。 – chryss 2012-03-01 21:41:13

相關問題