Django "get" 方法无法工作

1 投票
1 回答
605 浏览
提问于 2025-04-18 09:36

我正在尝试使用Python/Django中的“get”方法从我的数据库中获取一行数据。我使用的模型是

class SavedQuery(models.Model):
    name = models.CharField(max_length = 512)
    queryText = models.CharField(max_length = 2048)
    created = models.DateTimeField(auto_now_add=True)

现在,我已经在数据库中保存了一些值,并确保它们都是唯一的。所以现在我想在给定一个名字的情况下获取queryText的值。我尝试使用以下代码:

    entry = SavedQuery.objects.get(name = query_name) 
    #query_name is an input to the function, and I've verified it is correct

不过,获取数据的那一行代码并没有成功。我在浏览器中遇到了500错误,而我运行服务器的终端也没有显示任何错误信息。DEBUG输出对我来说也很难理解。

我临时的解决办法是使用SavedQuery.objects.all(),然后逐个检查名字字段,但我在Django网站上看到其实可以直接获取某个字段中有特定值的对象列表,所以我更想直接这样做。

编辑:出错的地方的调试输出是

2014-06-12 19:56:20 DEBUG    bolt django.db.backends util.execute:79: (0.000) SELECT `bolt_savedquery`.`id`, `bolt_savedquery`.`name`, `bolt_savedquery`.`queryText`, `bolt_savedquery`.`created` FROM `bolt_savedquery` WHERE `bolt_savedquery`.`name` = 'Kyle' ; args=(u'Kyle',)
2014-06-12 19:56:20 DEBUG    bolt django.db.backends util.execute:79: (0.000) SELECT `bolt_savedquery`.`id`, `bolt_savedquery`.`name`, `bolt_savedquery`.`queryText`, `bolt_savedquery`.`created` FROM `bolt_savedquery` LIMIT 21; args=()

1 个回答

3

根据你的评论,你遇到了一个 SavedQuery.MultipleObjectsReturned 的错误。这意味着你查询的结果返回了多个对象。为了避免这个问题,你可以把 name 字段设置为唯一,这样在使用 SavedQuery.objects.get() 时就只会得到一个结果。或者你可以使用 SavedQuery.objects.filter(name=VALUE).first() 这种方式,这样会返回第一个匹配的结果。你也可以用 .last() 来获取最近创建的那个对象。

撰写回答