2

モデル:

class Vote(models.Model):
    user = models.ForeignKey(User)
    design = models.ForeignKey(Design)
    vote = models.DecimalField(max_digits=2,decimal_places=1, choices=RATE_CHOICES)

ビュー:

def add_vote(request, id, vote):
    user = request.user
    Vote.objects.create(user=user, design = id, vote = vote)
    return HttpResponseRedirect('/')

URL:

url(r'^vote/(?P<id>\d+)/(?P<vote>\d{1,5})/', 'app.views.add_vote'),

たとえば、次のようにします。

127.0.0.1:8000/投票/1/3

このエラーがあります:

/vote/1/3/ での ValueError

"u'1'" を割り当てることができません: "Vote.design" は "Design" インスタンスでなければなりません。

4

3 に答える 3

4

Vote.designDesign数値ではなく、インスタンスでなければなりません:

from django.http import Http404

def add_vote(request, id, vote):
    user = request.user
    try:
        design = Design.objects.get(pk=id)
    except Design.DoesNotExist:
        raise Http404

    Vote.objects.create(user=user, design=design, vote=vote)
    return HttpResponseRedirect('/')

またはショートカットで:

from django.shortcuts import get_object_or_404

def add_vote(request, id, vote):
    user = request.user
    design = get_object_or_404(Design, pk=id)
    Vote.objects.create(user=user, design=design, vote=vote)
    return HttpResponseRedirect('/')
于 2013-03-11T11:43:11.323 に答える
1

に変更designするdesign_idと、エラーが修正されます

def add_vote(request, id, vote):
    user = request.user
    Vote.objects.create(user=user, design_id = id, vote = vote)
    return HttpResponseRedirect('/')
于 2013-03-11T11:42:46.447 に答える
0

Designモデルのインスタンスを取得し、そのdesignプロパティを割り当てる必要がありますVote

def add_vote(request, id, vote):
    user = request.user
    design = Design.objects.get(id=id)
    Vote.objects.create(user=user, design=design, vote=vote)
    return HttpResponseRedirect('/')
于 2013-03-11T11:42:53.630 に答える