2011-12-17 61 views
20

我是Django的新手,嘗試將作者姓名傳遞給視圖,並根據作者姓名篩選出引用對象。這裏是代碼:Django:int()的基數爲10的無效字面積

models.py

class Author(models.Model): 
    author_name = models.CharField(max_length=50, default='unknown') 
    author_info = models.TextField(max_length=1000) 


class Quote(models.Model): 
    author = models.ForeignKey(Author) 
    quote = models.TextField(max_length=500) 
    category= models.ForeignKey(Category) 
    pub_date = models.DateTimeField('date published') 

urls.py:

url(r'^quotes/(?P<name>\w+)/$', 'quotes.views.quotesbyauthor'), 

views.py

def quotesbyauthor(request, name): 
    aquotelist = Quote.objects.filter(author__exact = name) 
    return render_to_response(quotes_by_author.html, {'aquotelist': aquotelist }) 

不過我,當我試圖讓得到這個錯誤http://127.0.0.1:8000/quotes/you/ ('你'是一個測試作者對象,已經創建)

ValueError at /quotes/you/ 

invalid literal for int() with base 10: 'you' 

Request Method:  GET 
Request URL: http://127.0.0.1:8000/quotes/you/ 
Django Version:  1.3.1 
Exception Type:  ValueError 
Exception Value:  

invalid literal for int() with base 10: 'you' 

Exception Location:  /home/qliq/djenv/lib/python2.6/site-packages/django/db/models/fields/__init__.py in get_prep_value, line 479 
Python Executable: /home/qliq/djenv/bin/python 
Python Version:  2.6.6 
Python Path:  

['/home/qliq/djenv/quoteapp', 
'/home/qliq/djenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg', 
'/home/qliq/djenv/lib/python2.6/site-packages/pip-0.7.2-py2.6.egg', 
'/home/qliq/djenv/lib/python2.6', 
'/home/qliq/djenv/lib/python2.6/plat-linux2', 
'/home/qliq/djenv/lib/python2.6/lib-tk', 
'/home/qliq/djenv/lib/python2.6/lib-old', 
'/home/qliq/djenv/lib/python2.6/lib-dynload', 
'/usr/lib/python2.6', 
'/usr/lib/python2.6/plat-linux2', 
'/usr/lib/python2.6/lib-tk', 
'/home/qliq/djenv/lib/python2.6/site-packages'] 

我感謝您的幫助來解決這個問題。

+0

這是一個粘貼錯誤,你的.html模板沒有引號嗎? – jdi 2011-12-17 21:41:32

+0

也請發佈更完整的回溯,因爲它應該告訴你錯誤的特定行和上下文。嘗試將名稱設置爲缺省關鍵字,例如quotesbyauthor(request,name ='') – jdi 2011-12-17 21:45:58

+0

@jdi,我用更詳細的錯誤消息更新了問題。另外,我在模板名稱周圍添加了引號,但它沒有效果。 – qliq 2011-12-17 21:51:47

回答

27

你想搜索作者的author_name字段,而不是id。

Quote.objects.filter(author__author_name=name) 

根據您當前的搜索,author__exact,Django的預計name是作者的ID,所以給出了一個錯誤,因爲you不是整數。

+0

gah我在上面評論時完全忽略了這一點。好的眼睛:-) – jdi 2011-12-17 21:49:06

+0

根據U-DON的回答,他確實將其屬性author_name命名爲過濾器需要修復 – jdi 2011-12-17 21:51:10

+0

@jdl是的,我的字段名稱不正確。我現在修好了。 – Alasdair 2011-12-17 21:55:00

4
aquotelist = Quote.objects.filter(author__author_name__exact = name) 

嘗試將相應的行更改爲上述內容。您現在的方式是,您將author與指定名稱匹配,但author可能在此處被其ID所認爲,絕對不是其author_name。格式如下:

Quote.objects.filter([model]__[field]__exact = [whatever]) 
+0

謝謝,我會記得過濾器的語法以避免類似的錯誤。 – qliq 2011-12-17 22:06:51

相關問題