Django:以10为基数的int()的文本无效

Django:以10为基数的int()的文本无效,django,exception,Django,Exception,我是Django的新手,尝试将作者的姓名传递给视图,并根据作者的姓名筛选出quote对象。代码如下: 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

我是Django的新手,尝试将作者的姓名传递给视图,并根据作者的姓名筛选出quote对象。代码如下:

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')
URL.py:

url(r'^quotes/(?P<name>\w+)/$', 'quotes.views.quotesbyauthor'),
但是,当我尝试获取 (“you”是测试作者对象,已创建)


我感谢你帮助解决这个问题

您想搜索作者的
作者姓名
字段,而不是id

Quote.objects.filter(author__author_name=name)
在当前搜索中,
author\uuu-exact
,Django希望
name
是作者的id,因此给出了一个错误,因为
you
不是整数

aquotelist = Quote.objects.filter(author__author_name__exact = name)
尝试将相应的行更改为上面的行。按照现在的方式,您正在将
作者
与给定的名称进行匹配,但是
作者
可能是通过其ID来考虑的,而不是通过其
作者名
。格式如下:

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

我认为您应该重置迁移,您可以看到以下链接:


我希望这能帮助您。

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

C:\python 37\Lib\site-packages\django\db\models\fields 
编辑文件
\uuuu init\uuuuu.py
并编辑第1807行;替换

return int(value)


因此,只需删除参数,您的程序将删除所有字段引用。

我遇到了这个问题,我发现在与(作者)建立外键关系之前,我在DB表中记录了(引用)在建立外键关系之后,Django不知道如何处理Quote模型中的旧数据(旧记录应该分配给作者中的哪些记录)

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

删除旧报价记录:
Quote.objects.all()。删除shell中的

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


makemigrations、migrate和runserver。。。完成

我已经面对并解决了类似的问题, 关注属性:
author=models.ForeignKey(author)
django希望您将
Author
类的实例传递给
Author
字段。搜索django时,您希望获取id(此实例的整数): 因此,要获得:

aquotelist = Quote.objects.filter(author__exact = name)
你必须从以下几点开始:

  • 创建
    obj\u Author=Author.objects.get(Author\u name=name)

  • aqotelist=Quote.objects.get(author\uu exact=obj\u author.id)


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

    您的.html模板周围没有引号,这只是一个粘贴错误吗?另外,请发布更完整的回溯,因为它应该告诉您错误的具体行和上下文。尝试将name设置为默认关键字,如quotesbyauthor(request,name='')@jdi,我用更详细的错误消息更新了问题。另外,我在模板名称周围添加了引号,但没有效果。我在上面的评论中完全忽略了这一点。好眼力:-)根据U-DON的回答,他确实给属性作者命名了,所以过滤器需要一个fixCheers Alasdair!你很好地发现了这个问题。谢谢,我会记住过滤器的语法以避免类似的错误。这个答案必须删除,它可能会误导一些初级开发人员。首先,永远不要直接修改一些库文件,尤其是像Django这样的大型文件。其次,此修复程序将使任何
    int
    字段查询因未使用正确的值而失败。此答案需要两个单独的DB查询。看看其他一些只使用一个答案的答案。他们将更加出色。太棒了,非常感谢!帮了很多忙!
    return int(value)
    
    return int()
    
    aquotelist = Quote.objects.filter(author__exact = name)