【问题标题】:Django: invalid literal for int() with base 10Django:以 10 为底的 int() 的无效文字
【发布时间】:2012-01-22 19:08:45
【问题描述】:

我是 Django 新手,我试图将作者姓名传递给视图并根据作者姓名过滤掉引用对象。以下是代码:

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/ 时出现此错误 ('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']

感谢您帮助解决此问题。

【问题讨论】:

  • 您的 .html 模板周围没有引号是否只是一个粘贴错误?
  • 另外请发布更完整的回溯,因为它应该告诉您错误的特定行和上下文。尝试将 name 设置为默认关键字,例如 quotesbyauthor(request, name='')
  • @jdi,我用更详细的错误消息更新了问题。另外,我在模板名称周围添加了引号,但没有效果。

标签: django exception


【解决方案1】:

您要搜索作者的 author_name 字段,而不是 id。

Quote.objects.filter(author__author_name=name)

在您当前的搜索 author__exact 中,Django 期望 name 是作者的 id,因此会给出错误,因为 you 不是整数。

【讨论】:

  • gah 我在上面评论时完全忽略了那个。好眼光:-)
  • 根据 U-DON 的回答,他确实将他的属性命名为 author_name 以便过滤器需要修复
  • 干杯阿拉斯代尔!你很好地发现了问题。
【解决方案2】:
aquotelist = Quote.objects.filter(author__author_name__exact = name)

尝试将相应的行更改为上面的行。您现在拥有它的方式是,您将author 与给定名称匹配,但author 可能在这里被它的ID 考虑,绝对不是它的author_name。格式如下:

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

【讨论】:

  • 谢谢,我会记住过滤器的语法以避免类似的错误。
【解决方案3】:

我遇到并解决了类似的问题, 关注属性:author = models.ForeignKey(Author) django 期望您将Author 类的实例传递给author 字段。当你搜索 django 想要获取一个 id(这个 Instance 的整数): 所以得到:

aquotelist = Quote.objects.filter(author__exact = name)

你必须从:

  1. 创建obj_Author = Author.objects.get(author_name = name)

  2. aquotelist = Quote.objects.get(author__exact = obj_Author.id)

PS:(我在示例中使用了get(),但如果您希望获得多条记录,您可以使用filter() 并修改某些内容。但重点是因为您使用“ForeignKey 字段”所以你需要给它一个id,比如obj_Author.id。)

【讨论】:

  • 这个答案需要 2 个单独的数据库查询。查看仅使用一个的其他一些答案。它们的性能会更高。
【解决方案4】:

我认为你应该重置你的迁移,你可以看到这个链接:

https://stackoverflow.com/a/54768217/9533909

希望对你有帮助。

【讨论】:

    【解决方案5】:

    我遇到了这个问题,我发现我在 DB 表中记录了在你的情况下是 (Quote) 在与 (Author) 建立外键关系之前然后在建立外键关系之后 Django 不知道什么处理 Quote 模型中的旧数据(应将旧记录分配给 Author 中的哪些记录)

    --> 最简单的解决方案是:

    删除您的旧报价记录:Quote.objects.all().delete 在您的外壳中

    正确地重新创建和重新分配其新记录

    makemigrations, migrate and runserver ...完成

    【讨论】:

      【解决方案6】:

      这将永久解决您的问题 ::转到您的目录

      C:\python 37\Lib\site-packages\django\db\models\fields 
      

      并编辑文件__init__.py并编辑第1807行;替换

      return int(value)
      

      return int()
      

      所以只需删除参数 value 然后你的程序将除了所有字段引用。

      【讨论】:

      • 这个答案必须删除,它可能会误导一些初级开发人员。首先,永远不要直接修改一些库文件,尤其是对于像 Django 这样的大文件。其次,此修复程序将使任何int 字段查询因未使用正确的值而失败
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      相关资源
      最近更新 更多