Django Formset填充时应为空白 [英] Django Formset populating when it should be blank

查看:95
本文介绍了Django Formset填充时应为空白的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是拥有一个列出5个相同表单版本的表单集。提交表单后,应在数据库中创建填写好的表单。

My goal is to have a formset that lists 5 versions of the same form. On submit the form should create the filled out forms in the DB.

我的问题是表格重新填充了数据。不好对我可能做错的事情有任何想法吗?

My issue is that the forms come repopulated with data. Which is bad. Any thoughts on what I might be doing wrong?

Models.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

Forms.py

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

Views.py

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>


推荐答案

在irc django频道上的apollo13找到了答案。

apollo13 on irc django channel figured out the answer.

我需要添加查询集

编辑

qs = Todo.objects.none()
formset = TodoFormSet(queryset=qs)

最终代码

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))

这篇关于Django Formset填充时应为空白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆