0

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

@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没有使用从数据库中获得的值选择其中一个字段,即一个框。其他选择框被选择为适当的值。

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

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

表格.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
4

1 回答 1

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,并且可能将整数值强制转换为数据库中的1to 1.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+'))

于 2012-08-22T21:19:01.233 回答