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