简体   繁体   English

如何使用 Django 表单编辑模型数据

[英]how to edit model data using django forms

i'm new to django so i'm sorry for my newbie question我是 Django 的新手,所以我很抱歉我的新手问题
i have a model and i need to let user edit data inside it using django forms or any other way.我有一个模型,我需要让用户使用 Django 表单或任何其他方式编辑其中的数据。在此处输入图片说明

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编辑:这是我的 views.py 代码

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)               

please help请帮忙

Assuming you are using a ModelForm , use the instance keyword argument, and pass the model you are updating.假设您使用的是ModelForm ,请使用instance关键字参数,并传递您正在更新的模型。

So, if you have MyModel and MyModelForm (the latter of which must extend django.forms.ModelForm ), then your code snippet might look like:因此,如果您有MyModelMyModelForm (后者必须扩展django.forms.ModelForm ),那么您的代码片段可能如下所示:

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

And then, when the user sends back data by POST:然后,当用户通过 POST 发回数据时:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM