0

モデルの 1 つの編集ビューがあります。

@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ボックスであるフィールドの 1 つが 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}}

フォーム.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

DB 内のデータは、選択によって一致していません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 の小数点以下の桁数を持つことを想定しており、おそらく DB 内の整数から1までのような値を強制します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 に答える