如何使用相同的django表单编辑/添加对象?

时间:2010-03-06 21:53:06

标签: django django-forms

嘿,我已经四处寻找这个(特别是这个Q:Django edit form based on add form?),但我无法让它发挥作用。

我遇到的问题是表单总是创建一个新对象,而不是修改现有对象。

这是我的代码:

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

1 个答案:

答案 0 :(得分:4)

好的,经过一个愉快的调试之夜后,我发现了问题所在。实际上相当愚蠢。 问题是在提交时,task_id为None。

我通过以下方式解决了这个问题:

  1. 在我添加的表单上:<form action="{% url App.myapp.views.new_task **task_id** %}"
  2. 在我的观点中,我补充道:

    返回custom_render('user / new_task.html',                      {'form':表单,'提交':提交,'task_id':task.id },                      请求)

  3. 就是这样。一个新手的错误。如果那里有人知道更好的方式,我愿意接受建议。