как редактировать данные модели с помощью django forms

#python #django #django-forms

#python #django #django-forms

Вопрос:

я новичок в django, поэтому прошу прощения за свой вопрос новичка
у меня есть модель, и мне нужно разрешить пользователю редактировать данные внутри нее с помощью django forms или любым другим способом. введите описание изображения здесь

посмотрите на изображение выше, я хочу показать эту форму готовой, заполненной данными, и позволить пользователю обновить ее.
каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ: вот мой 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)               
  

пожалуйста, помогите

Комментарии:

1. Какая часть docs.djangoproject.com/en/1.3/ref/forms/api / … сбивал с толку? Можете ли вы быть более конкретным? Можете ли вы опубликовать свой код?

2. Почему бы вам не опубликовать часть кода, который у вас уже есть? Это так же просто, как возвращать объект модели «Вопрос» с полями, которые вы заполняете текстом по умолчанию.

3. Просто предупреждаю, но последние 2 строки вашего кода без отступов.

4. @S.Лотт: Ничего. Однако там нет ничего, что отвечало бы на вопрос.

Ответ №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

Комментарии:

1. Это не может быть лучшим ответом. Логика, которую вы только что описали, реализована модулем администратора с разрешениями и всем остальным. Должен быть способ использовать это во внешнем интерфейсе.

2. @oneloop, даже если вы хотите реализовать функцию редактирования данных во внешнем интерфейсе, вам необходимо отправить данные на серверную часть для обновления. Я бы предположил, что вы создадите полное представление и передадите оттуда работу с запросом