2013-07-12 8 views
6

Quando provo a presentare, ottengo un TypeError:Django SimpleLazyObject

int() argument must be a string or a number, not 'SimpleLazyObject'

mio views.py:

def bookmark_save_page(request): 
    if request.method == 'POST': 
     form = BookmarkSaveForm(request.POST) 
     if form.is_valid(): 
      # Create or get link. 
      link, dummy = Link.objects.get_or_create(
       url=form.cleaned_data['url'] 
       ) 
      # Create or get bookmarks. 
      bookmark, created = Bookmark.objects.get_or_create(
       user = request.user, 
       link = link 
       ) 
      # Update bookmark title. 
      bookmark.title = form.cleaned_data['title'] 
      # If the bookmark is being updated, clear old tag list. 
      if not created: 
       bookmark.tag_set.clear() 
      # Create new tag list. 
      tag_names = form.cleaned_data['tags'].split() 
      for tag_name in tag_names: 
       tag, dummy = Tag.objects.get_or_create(name=tag_name) 
       bookmark.tag_set.add(tag) 
      # Save bookmark to database. 
      bookmark.save() 
      return HttpResponseRedirect(
       '/user/%s/' %request.user.username 
       ) 
    else: 
     form = BookmarkSaveForm() 

    variables = RequestContext(request, {'form': form}) 
    return render_to_response('bookmark_save.html',variables) 

Si prega di guidarmi. Grazie.

+0

possibile duplicato del [int() argomento deve essere una stringa o un numero, non 'SimpleLazyObject'] (http://stackoverflow.com/questions/15878860/int-argument-must-be-a- string-or-a-number-not-simplelazyobject) –

risposta

12

request.user, per impostazione predefinita è di tipo SimpleLazyObject. Per risolverlo,

bookmark, created = Bookmark.objects.get_or_create(
      user = request.user, 
      link = link 
      ) 

dovrebbe essere

bookmark, created = Bookmark.objects.get_or_create(
      user = request.user.id, 
      link = link 
      ) 

Se ciò non risolve, assicurarsi aver effettuato l'accesso.

+1

Ok, l'ho fatto, come tu hai scritto qui. Ma ora ricevo un altro errore .: "Impossibile assegnare Nessuno:" Bookmark.user "non consente valori nulli." – Tchec

+2

sembra che tu non abbia effettuato l'accesso. tu sei ? usa decoratore '@ login_required' – karthikr

+2

Ok, scusa se non ho effettuato l'accesso. Ma ora quando lo sono, ricevo questo errore: ' Impossibile assegnare "3": "Bookmark.user" deve essere un'istanza "Utente" – Tchec

1

c'è un'altra opzione, può essere questa soluzione vi aiuterà aggiustalo.

from django.contrib import auth 

bookmark, created = Bookmark.objects.get_or_create(
     user = auth.get_user(request), 
     link = link 
     )