0

私は django フォームの初心者であり、非常に特殊なユーザー インターフェイスを作成しようとしているため、モデル フォームを使用できません (または使用できますか?)

次のようなカスタム フォームを作成しました。

しかし、それはデータベースにコミットしませんか?

これは私のhtmlフォームです:

    <form method="POST" action='/create/' id="big_idea_form" class="tabscontent">{% csrf_token %}
        <label class="tabpage" id="tabpage_1" ><span>next</span><p>Give it a name!</p><input type="text" id="name"  placeholder="Type your title here" onblur='changeIt("name", "name_span")'/></label>
        <label class="tabpage" id="tabpage_2" ><p>What is it about?</p><input type="text" id="subtitle" name="subtitle" placeholder="Type your subtitle here" onblur='changeIt("subtitle", "subtitle_span")'/></label>
        <label class="tabpage" id="tabpage_3" ><p>Why is it important?</p><textarea id="description" name= "description" cols="42" rows="5" placeholder="this can be any description but it becomes more interesting if you can explain why it is important as part of your description" onblur='changeIt("description", "description_span")'></textarea></label>
        <label class="tabpage" id="tabpage_4" ><p id="success_title">What is  considered success?</p><textarea id="success" name="success" cols="42" rows="5" placeholder="describe what sucess means to your students... what does mastery look like?" onblur='changeIt("success", "success_span")'></textarea></label>
        <input type="submit" value="Submit"/>        
    </form>  

これは私のフォームです:

from django import forms
import urlparse
from models import Lesson

class CreateLesson(forms.Form):
    name=forms.CharField()
    subtitle=forms.CharField(required=False)
    creator=forms.CharField() #automate
    description=forms.CharField()
    success=forms.CharField()
    unit=forms.CharField(required=False)
    public=forms.BooleanField()

    def save(self, request):
    data=self.cleaned_data
    Lesson.creator = request.user
    Lesson.name=data.get('name', '')
    Lesson.subtitle=data.get('subtitle', '')
    Lesson.topic=data.get('topic', '')
    Lesson.description=data.get('description', '')
    Lesson.unit=data.get('unit', '')
    Lesson.public=data.get('public', True)
    Lesson.save()
    return Lesson

そして、ここに私の見解があります:

from django.shortcuts import render
from django.http import HttpResponseRedirect
from forms import CreateLesson

def Create_Lesson(request):
    if request.method == 'POST': # If the form has been submitted...
        form = CreateLesson(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            form.save()
            return HttpResponseRedirect('/create/') # Redirect after POST
    else:
        form = CreateLesson() # An unbound form

    return render(request, 'create_lesson/new_ideas.html', {
        'form': form,
    })
4

1 に答える 1

1

問題は、フォームに表されていないモデルのフィールドがあったため、フォームが検証されていなかったことでした...私はModelFormを使用してフォームを単純化し、そのように除外しました

フォーム.py

class CreateLessonModel(forms.ModelForm):
    class Meta:
    model = Lesson
    exclude =('unit', 'slug', 'topic', 'public', 'created_date', 'creator')

ビュー.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from forms import CreateLessonModel
from django.template.defaultfilters import slugify
def Create_Lesson(request):
    if request.method == "POST": # If the form has been submitted...
        form = CreateLessonModel(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            lesson = form.save(commit=False)
            lesson.creator = request.user
            lesson.slug = slugify(lesson.name)
            lesson.save()
            return HttpResponseRedirect('') # Redirect after POST
    else:
        form = CreateLessonModel() # An unbound form

    return render(request, 'create_lesson/new_ideas.html', {
        'form': form,
    })
于 2012-12-05T05:26:07.780 に答える