Django表单集应为空时填充

Django表单集应为空时填充,django,django-forms,Django,Django Forms,我的目标是创建一个表单集,列出同一表单的5个版本。提交时,表格应在DB中创建填写的表格 我的问题是表单中重新填充了数据。这很糟糕。有没有想过我可能做错了什么 型号.py from django.db import models from django.contrib.auth.models import User PRIORITIES = ( ('1', 'High'), ('2', 'Medium'), ('3', 'Low'), ) class Todo(mode

我的目标是创建一个表单集,列出同一表单的5个版本。提交时,表格应在DB中创建填写的表格

我的问题是表单中重新填充了数据。这很糟糕。有没有想过我可能做错了什么

型号.py

from django.db import models
from django.contrib.auth.models import User

PRIORITIES = (
    ('1', 'High'),
    ('2', 'Medium'),
    ('3', 'Low'),
)

class Todo(models.Model):
    task = models.CharField(max_length=200)
    owner = models.ForeignKey(User)
    priority = models.CharField(max_length=10, choices=PRIORITIES)
    creation_date = models.DateField('date created', blank=True, null=True)
    due_date = models.DateField('date due', blank=True, null=True)
    completion_date = models.DateField('date complete', blank=True, null=True)
    completed = models.BooleanField()
    def __unicode__(self):
        return self.task
from django import forms
from pooflinger.todo.models import Todo
from django.forms import ModelForm
from django.forms.models import modelformset_factory

TodoFormSet = modelformset_factory(Todo, max_num=2,)

class TodoForm(forms.ModelForm):

    class Meta:
        model = Todo
def todo_form(request):
    user = request.user
    current_date = datetime.now()
    if request.method == 'POST':
        formset = TodoFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/todo/')
    else:
        formset = TodoFormSet()
    return render_to_response('todo/todo_formset.html', {
        'user': user,
        'formset': formset,
        'current_date': current_date,
    }, context_instance=RequestContext(request))
Forms.py

from django.db import models
from django.contrib.auth.models import User

PRIORITIES = (
    ('1', 'High'),
    ('2', 'Medium'),
    ('3', 'Low'),
)

class Todo(models.Model):
    task = models.CharField(max_length=200)
    owner = models.ForeignKey(User)
    priority = models.CharField(max_length=10, choices=PRIORITIES)
    creation_date = models.DateField('date created', blank=True, null=True)
    due_date = models.DateField('date due', blank=True, null=True)
    completion_date = models.DateField('date complete', blank=True, null=True)
    completed = models.BooleanField()
    def __unicode__(self):
        return self.task
from django import forms
from pooflinger.todo.models import Todo
from django.forms import ModelForm
from django.forms.models import modelformset_factory

TodoFormSet = modelformset_factory(Todo, max_num=2,)

class TodoForm(forms.ModelForm):

    class Meta:
        model = Todo
def todo_form(request):
    user = request.user
    current_date = datetime.now()
    if request.method == 'POST':
        formset = TodoFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/todo/')
    else:
        formset = TodoFormSet()
    return render_to_response('todo/todo_formset.html', {
        'user': user,
        'formset': formset,
        'current_date': current_date,
    }, context_instance=RequestContext(request))
视图.py

from django.db import models
from django.contrib.auth.models import User

PRIORITIES = (
    ('1', 'High'),
    ('2', 'Medium'),
    ('3', 'Low'),
)

class Todo(models.Model):
    task = models.CharField(max_length=200)
    owner = models.ForeignKey(User)
    priority = models.CharField(max_length=10, choices=PRIORITIES)
    creation_date = models.DateField('date created', blank=True, null=True)
    due_date = models.DateField('date due', blank=True, null=True)
    completion_date = models.DateField('date complete', blank=True, null=True)
    completed = models.BooleanField()
    def __unicode__(self):
        return self.task
from django import forms
from pooflinger.todo.models import Todo
from django.forms import ModelForm
from django.forms.models import modelformset_factory

TodoFormSet = modelformset_factory(Todo, max_num=2,)

class TodoForm(forms.ModelForm):

    class Meta:
        model = Todo
def todo_form(request):
    user = request.user
    current_date = datetime.now()
    if request.method == 'POST':
        formset = TodoFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/todo/')
    else:
        formset = TodoFormSet()
    return render_to_response('todo/todo_formset.html', {
        'user': user,
        'formset': formset,
        'current_date': current_date,
    }, context_instance=RequestContext(request))
表单模板

<form method="post" action="">
    <table>
        {{ formset }}
    </table>
        <button class="glue primary" type="submit" value="Submit">Submit</button></p>

</form>
def todo_form(request):
    user = request.user
    current_date = datetime.now()
    qs = Todo.objects.none()
    if request.method == 'POST':
        formset = TodoFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/todo/')
    else:
        formset = TodoFormSet(queryset=qs)
    return render_to_response('todo/todo_formset.html', {
        'user': user,
        'formset': formset,
        'current_date': current_date,
    }, context_instance=RequestContext(request))

{{formset}}
提交


irc django频道的阿波罗13找到了答案

我需要添加一个查询集

编辑

qs = Todo.objects.none()
formset = TodoFormSet(queryset=qs)
最终代码

<form method="post" action="">
    <table>
        {{ formset }}
    </table>
        <button class="glue primary" type="submit" value="Submit">Submit</button></p>

</form>
def todo_form(request):
    user = request.user
    current_date = datetime.now()
    qs = Todo.objects.none()
    if request.method == 'POST':
        formset = TodoFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect('/todo/')
    else:
        formset = TodoFormSet(queryset=qs)
    return render_to_response('todo/todo_formset.html', {
        'user': user,
        'formset': formset,
        'current_date': current_date,
    }, context_instance=RequestContext(request))

这既奇怪,又在文档中