编辑表单不加载表单值

时间:2012-08-22 19:36:10

标签: django django-forms django-1.4

我有一个模特的编辑视图。

@login_required        
def edit(request, id):
    ''' Edit form '''
    if id:
        post = get_object_or_404(Post, pk=id)
        if post.user != request.user:
            return HttpResponseForbidden()
    else:
        post = Post()

    if request.POST:
        form = PostForm(request.POST, instance = post)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('posts_manage'))
    else:
        form = PostForm(instance = post)

    return render_to_response('posts/add.html', {'form':form}, context_instance=RequestContext(request))

一切正常,所有帖子信息都已正确加载,但其中一个字段(select框)未使用从DB获取的值进行选择。其他选择框被选择为适当的值。

未在模型定义中正确填充的字段:

class Post(models.Model):
    ...
    BATHROOM_CHOICES = ((1,'1'),(1.5,'1.5'),(2,'2'),(2.5,'2.5'),(3,'3'),(3.5,'3.5'),(4,'4'), (4.5,'4.5'),(5,'5+'))
    bathrooms = models.DecimalField(max_digits = 2,decimal_places = 1,choices = BATHROOM_CHOICES)

add.html中的相关部分:

{{ form.bathrooms|bootstrap}}

forms.py

class PostForm(ModelForm):
    class Meta:
        model = Post
        exclude = ('available','user',)

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(PostForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        kwargs['commit'] = False
        obj = super(PostForm, self).save(*args, **kwargs)
        if self.request:
            obj.user = self.request.user
        obj.save()
        return obj

1 个答案:

答案 0 :(得分:2)

BATHROOM_CHOICES

中的选项未匹配数据库中的数据

BATHROOM_CHOICES = ((1,'1'),(1.5,'1.5'),(2,'2'),(2.5,'2.5'),(3,'3'),(3.5,'3.5'),(4,'4'), (4.5,'4.5'),(5,'5+'))models.DecimalField(max_digits = 2,decimal_places = 1, 是矛盾的。

您的模型定义要求所有值的小数位至少为1,并且可能会强制数据库中的11.0之间的整数值(取决于适配器实现)。

然后当它查找与值1 !== 1.0匹配的选项时,所以没有选择任何值。

可能的解决方法: BATHROOM_CHOICES = ((1.0,'1'),(1.5,'1.5'),(2.0,'2'),(2.5,'2.5'),(3.0,'3'),(3.5,'3.5'),(4.0,'4'), (4.5,'4.5'),(5.0,'5+'))