问题
I am new to Django and trying to pass an author's name to a view and filter out quote objects based on the author's name. here are the codes:
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 })
However I get this error when I try to get http://127.0.0.1:8000/quotes/you/ ('you' is a test author object, already created)
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']
I appreciate your help to resolve this.
回答1:
You want to search on the author's author_name field, not the id.
Quote.objects.filter(author__author_name=name)
With your current search, author__exact, Django expects name to be the id of the author, so gives an error because you is not an integer.
回答2:
aquotelist = Quote.objects.filter(author__author_name__exact = name)
Try changing the corresponding line to the above. The way you have it now, you are matching author to the given name, but author is probably considered by its ID here, definitely not by its author_name. The format is as follows:
Quote.objects.filter([model]__[field]__exact = [whatever])
回答3:
I think you should reset your migrate , you can see this link :
https://stackoverflow.com/a/54768217/9533909
i hope that help you.
回答4:
This will fix your problem permanently ::go to your directory
C:\python 37\Lib\site-packages\django\db\models\fields
and edit the file __init__.py and edit line 1807; replace
return int(value)
with
return int()
So just delete the argument value then your program will except all field references.
来源:https://stackoverflow.com/questions/8548023/django-invalid-literal-for-int-with-base-10