2014-04-30 91 views
2

我正在Django中的一个简单的搜索结果页面。Django无效文字int()与基数10

用户按文字搜索并从下拉菜单中添加城市字段。

查询如下:

if 'query' in request.GET and request.GET['query']: 
    city = request.GET['city'] 
    q = request.GET['query'] 
    ct = Classified.objects.filter(name__icontains=q).filter(city__exact=city) 
    return render(request, 'template/search.html', {'ct': ct, 'query': q}) 

的分类模型如下:

class Classified(models.Model): 
    name = models.CharField(max_length=256, unique=True) 
    email = models.CharField(max_length=100) 
    category = models.ForeignKey(Categories) 
    phone_number = models.IntegerField(max_length=10, default=0) 
    address = models.CharField(max_length=1000) 
    id = models.IntegerField(primary_key=True) 
    city = models.ForeignKey(Cities) 
    image = models.ImageField(blank=True, upload_to='static/img/') 

    def __unicode__(self): 
     return self.name 

城市如下:

class Cities(models.Model): 
    name = models.CharField(max_length=256) 

    def __unicode__(self): 
     return self.name 

在搜索时,/搜索/ page给我以下错误:

invalid literal for int() with base 10: 'Searched-city' 

我错过了什么?

+1

你有一个完整的回溯通过关系来更新您查询代理? – geoffspear

+0

相关问题列表中有很多问题看起来非常相似。你看看吗? – devnull

+0

@devnull,是啊我看过这两个:http://stackoverflow.com/questions/13861594/python-3-3-programming-valueerror-invalid-literal-for-int-with-base-10-be和这个http://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10。没有太大的帮助。 – Newtt

回答

5

市是一个外键,则需要通过明确说城市__name __exact

ct = Classified.objects.filter(name__icontains=q).filter(city__name__exact=city) 
+0

虽然是什么原因造成了原始错误并将其转换为int类型? (由于我自己的启发。) – 2rs2ts

+1

因为它试图将城市的字符串值转换为文字外键(城市表格上的主键)。 City__exact指的是主键,而不是该表的子字段 – Bryan

+0

而主键是...?我应该知道这个,但它是Django生成的一个uid吗? – 2rs2ts

相关问题