如何使用 Django 表单编辑模型数据 [英] how to edit model data using django forms

查看:39
本文介绍了如何使用 Django 表单编辑模型数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Django 新手,所以很抱歉我的新手问题
我有一个模型,我需要让用户使用 Django 表单或任何其他方式编辑其中的数据.

i'm new to django so i'm sorry for my newbie question
i have a model and i need to let user edit data inside it using django forms or any other way.

看上面的图片,我想显示这个表格已经填充了数据并让用户更新它.
这样做的最佳方法是什么?

这是我的 views.py 代码

look at the image above , i want to show this form ready populated with the data and let user update it.
what is the best way to do this ?

EDIT : here is my views.py code

def exam_Edit(request,examName,number=0):
    numner = int(number)
    number = int(number)
    questionNo = int(numner)
    Myexam = models.Exam.objects.get(name = examName)



    QuestionsAll = models.Question.objects.filter(exam = Myexam)

    myQeustion = Question.objects.filter(exam = Myexam)[nextQuestion]

    answer1 =  models.Asnwers.objects.filter(question=myQeustion)[0]
    answer2 =  models.Asnwers.objects.filter(question=myQeustion)[1]
    answer3 =  models.Asnwers.objects.filter(question=myQeustion)[2]
    answer4 = models.Asnwers.objects.filter(question=myQeustion)[3]


    # HERE IS MY PROBLEM : the line below creates a form with a data but it doesn't save it to the save object     
    form = QuestionsEditForm(initial = {'questionText':myQeustion.__unicode__() , 'firstChoiceText':answer1.__unicode__(),'secondChoiceText':answer2.__unicode__(),'thirdChoiceText':answer3.__unicode__(),'forthChoiceText':answer4.__unicode__()})

    if request.method =='POST':
        #if post 

        if form.is_valid():
            questionText = form.cleaned_data['questionText']
            Myexam = Exam.objects.get(name = examName)
            myQeustion.questionText = form.cleaned_data['questionText']



            answer1.answerText = form.cleaned_data['firstChoiceText']
            answer1.save()

            answer2.answerText = form.cleaned_data['secondChoiceText']
            answer2.save()

            answer3.answerText = form.cleaned_data['thirdChoiceText']
            answer3.save()

            answer4.answerText = form.cleaned_data['forthChoiceText']
            answer4.save()

 variables = RequestContext(request,     {'form':form,'examName':examName,'questionNo':str(nextQuestion)})
 return render_to_response('exam_edit.html',variables)               

请帮忙

推荐答案

假设您使用的是 ModelForm,请使用 instance 关键字参数,并传递您使用的模型更新中.

Assuming you are using a ModelForm, use the instance keyword argument, and pass the model you are updating.

因此,如果您有 MyModelMyModelForm(后者必须扩展 django.forms.ModelForm),那么您的代码片段可能看起来像:

So, if you have MyModel and MyModelForm (the latter of which must extend django.forms.ModelForm), then your code snippet might look like:

my_record = MyModel.objects.get(id=XXX)
form = MyModelForm(instance=my_record)

然后,当用户通过POST发回数据时:

And then, when the user sends back data by POST:

form = MyModelForm(request.POST, instance=my_record)

顺便说一下,ModelForm 的文档在这里:http://docs.djangoproject.com/en/1.8/topics/forms/modelforms/

Incidentally, the documentation for ModelForm is here: http://docs.djangoproject.com/en/1.8/topics/forms/modelforms/

这篇关于如何使用 Django 表单编辑模型数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆