2011-12-17 31 views
20

Tôi mới dùng Django và cố gắng chuyển tên của tác giả sang chế độ xem và lọc ra các đối tượng trích dẫn dựa trên tên của tác giả. đây là các mã:Django: chữ không hợp lệ cho int() với số 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 }) 

Tuy nhiên tôi nhận được lỗi này khi tôi cố gắng để có được http://127.0.0.1:8000/quotes/you/ ('bạn' là đối tượng tác giả thử nghiệm, đã được tạo)

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'] 

Tôi đánh giá cao sự giúp đỡ của bạn để giải quyết vấn đề này.

+0

Chỉ là lỗi dán mà mẫu .html của bạn không có dấu ngoặc kép xung quanh nó? – jdi

+0

Cũng xin vui lòng gửi một traceback hoàn chỉnh hơn vì nó phải được cho bạn biết một dòng cụ thể và bối cảnh của lỗi. Hãy thử đặt tên thành từ khóa mặc định như quotesbyauthor (yêu cầu, name = '') – jdi

+0

@jdi, tôi đã cập nhật câu hỏi với thông báo lỗi chi tiết hơn. Ngoài ra, tôi đã thêm dấu ngoặc kép xung quanh tên mẫu, nhưng nó không có hiệu lực. – qliq

Trả lời

27

Bạn muốn tìm kiếm trên trường của tác giả là author_name, không phải là id.

Quote.objects.filter(author__author_name=name) 

Với tìm kiếm hiện tại của bạn, author__exact, Django hy vọng name là id của tác giả, vì vậy đưa ra một lỗi vì you không phải là một số nguyên.

+0

gah Tôi hoàn toàn bỏ qua một khi tôi đã bình luận ở trên. Mắt tốt :-) – jdi

+0

Theo câu trả lời của U-DON, anh ta thực sự đặt tên thuộc tính author_name của mình để bộ lọc cần sửa lỗi – jdi

+0

@jdl có, tôi đã có tên trường sai. Tôi đã sửa nó ngay bây giờ. – Alasdair

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

Hãy thử thay đổi dòng tương ứng ở trên. Cách bạn có nó bây giờ, bạn đang kết hợp author với tên đã cho, nhưng author có thể được xem xét bởi ID của nó ở đây, chắc chắn không phải bởi author_name của nó. Định dạng như sau:

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

Cảm ơn, tôi sẽ nhớ cú pháp của bộ lọc để tránh các lỗi tương tự. – qliq

Các vấn đề liên quan