2013-03-11 2 views
2

модели:Невозможно назначить "u'1' ": "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('/') 

URLs:

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. ком/ен/DEV/темы/HTTP/ярлыки/# Get-объект или-404) –

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

Вы должны получить экземпляр вашей модели Design и присвоить имущество designVote:

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