2011-12-17 12 views
20

के साथ int() के लिए अमान्य शाब्दिक मैं Django के लिए नया हूं और लेखक के नाम को देखने के लिए लेखक के नाम को पास करने और उद्धरण वस्तुओं को फ़िल्टर करने का प्रयास कर रहा हूं। यहाँ कोड हैं:Django: आधार 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

+0

कृपया एक और पूर्ण ट्रेसबैक पोस्ट करें क्योंकि यह आपको एक विशिष्ट रेखा और त्रुटि के संदर्भ को बताना चाहिए। नाम को डिफ़ॉल्ट कीवर्ड जैसे quotesbyauthor (request, name = '') – jdi

+0

@jdi पर सेट करने का प्रयास करें, मैंने एक और विस्तृत त्रुटि संदेश के साथ प्रश्न अपडेट किया। इसके अलावा, मैंने टेम्पलेट नाम के चारों ओर उद्धरण जोड़े, लेकिन इसका कोई प्रभाव नहीं पड़ा। – qliq

उत्तर

27

आप लेखक के author_name फ़ील्ड पर खोज करना चाहते हैं, आईडी नहीं।

Quote.objects.filter(author__author_name=name) 
आपकी वर्तमान खोज, author__exact, जैंगो name उम्मीद लेखक की आईडी होने के लिए के साथ

, इसलिए एक त्रुटि देता है क्योंकि you एक पूर्णांक नहीं है।

+0

गाह मैंने पूरी तरह से अनदेखा किया जब मैं ऊपर टिप्पणी कर रहा था। अच्छी आंख :-) – jdi

+0

यू-डॉन के उत्तर के अनुसार, वह वास्तव में अपने गुण लेखक_नाम का नाम देता है ताकि फिल्टर को – jdi

+0

@jdl हां ठीक करने की आवश्यकता हो, मेरे पास गलत फ़ील्ड नाम था। मैंने इसे अभी तय कर लिया है। – Alasdair

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

उपरोक्त को संबंधित रेखा को बदलने का प्रयास करें। आपके पास अब जिस तरह से है, आप दिए गए नाम पर author से मेल खाते हैं, लेकिन author शायद इसकी आईडी द्वारा यहां माना जाता है, निश्चित रूप से इसके author_name द्वारा नहीं। प्रारूप निम्नानुसार है:

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

धन्यवाद, मुझे इसी तरह की त्रुटियों से बचने के लिए फ़िल्टर का सिंटैक्स याद होगा। – qliq

संबंधित मुद्दे