【问题标题】:Django invalid literal for int() with base 10以 10 为底的 int() 的 Django 无效文字
【发布时间】:2014-04-30 17:33:42
【问题描述】:

我正在 Django 中创建一个简单的搜索结果页面。

用户通过文本搜索并从下拉列表中添加城市字段。

查询如下:

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})

Classified的模型如下:

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

在搜索时,/search/ 页面给了我以下错误:

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

我错过了什么?

【问题讨论】:

标签: python django


【解决方案1】:

城市是外键,您需要通过明确表示 city__name__exact 来更新您的查询以通过关系代理

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

【讨论】:

  • 是什么导致了原来的错误转换为int? (为了我自己的启迪。)
  • 因为它试图将 city 的字符串值转换为文字外键(city 表上的主键)。 City__exact 是指主键,而不是该表的子字段
  • 而主键是...?我应该知道这一点,但它是 Django 生成的 uid 吗?
  • 完美,这就是我想我记得的(它也阐明了你的答案!)
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2017-05-18
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多