Как редактировать данные модели с помощью форм django
Я новичок в django, поэтому я сожалею о своем новичком
У меня есть модель, и я должен позволить пользователю редактировать данные внутри него с использованием форм django или любым другим способом.
![enter image description here]()
Посмотрите на изображение выше, я хочу показать эту форму, заполненную данными, и позволить пользователю ее обновить.
что это лучший способ сделать это?
EDIT: вот мой view.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)
пожалуйста, помогите
Ответы
Ответ 1
Предполагая, что вы используете ModelForm
, используйте аргумент ключевого слова instance
и передайте обновляемую модель.
Итак, если у вас есть MyModel
и MyModelForm
(последний из которых должен расширять django.forms.ModelForm
), то ваш фрагмент кода может выглядеть так:
my_record = MyModel.objects.get(id=XXX)
form = MyModelForm(instance=my_record)
И затем, когда пользователь отправляет данные по почте:
form = MyModelForm(request.POST, instance=my_record)
Кстати, документация для ModelForm
находится здесь: http://docs.djangoproject.com/en/1.8/topics/forms/modelforms/