2013-03-11 102 views
2

型号:无法分配 “U'' ”: “Vote.design” 必须是一个 “设计” 实例

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(r'^vote/(?P<id>\d+)/(?P<vote>\d{1,5})/', 'app.views.add_vote'), 

如果我尝试例如:

127 .0.0.1:8000 /票/ 1/3

我有这样的错误:

ValueError at /vote/1/3/

Cannot assign "u'1'": "Vote.design" must be a "Design" instance.

回答

4

Vote.design必须是Design实例,而不是一个号码:

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('/') 
+0

1为['get_object_or_404'](HTTPS://docs.djangoproject。 COM/EN /开发/主题/ HTTP /快捷键/#GET-对象或-404) – 2013-03-11 11:44:42

1

变化designdesign_id,它会改正错误

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

你需要找回Design模型的一个实例,并将Votedesign属性指定为:

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('/') 
相关问题