Django表单在使用实例时删除行数据

时间:2013-11-16 21:01:48

标签: django django-models django-forms

我有一个我正在管理的多页表单。当我更新记录时,它会删除以前捕获的所有数据。

模型

class User(models.Model):
    first = models.CharField(max_length=45L, db_column='First', blank=True)
    last = models.CharField(max_length=45L, db_column='Last', blank=True)
    email = models.CharField(max_length=60L, db_column='Email', blank=True)

表格

class UserForm(ModelForm):
    class Meta:
        model = User

表单1捕获电子邮件:

def form_one(request):
    if request.method == 'POST':
        print request.POST
        uf = UserForm(request.POST)
        if uf.is_valid():
            user = uf.save()
            request.session['id'] = user.id

打印:

<QueryDict: {u'email': [u'test@test.com']}>

数据库显示电子邮件记录

表单2捕获用户名:

def form_one(request):
    if request.method == 'POST':
        print request.POST
        current_user = User.objects.get(id = request.session['id'])
        uf = UserForm(request.POST, instance = current_user)
        if uf.is_valid():
            uf.save()

打印:

<QueryDict: {u'last': [u'Smith'], u'first': [u'Joe']}>

数据库显示相同的记录,已删除的电子邮件,但首先是&amp;姓氏。

1 个答案:

答案 0 :(得分:0)

您的电子邮件字段包含blank=True,因此空字符串''是有效值。这意味着如果您未在发布数据中为其提供值,则会擦除电子邮件。

如果您不想在第二个表单中包含电子邮件字段,请将其排除。

class UserForm(ModelForm):
    class Meta
        model = User
        exclude = ('email',)