Python 在更新查询集时使用模型字段的值进行字符串连接

Python 在更新查询集时使用模型字段的值进行字符串连接,python,mysql,django,Python,Mysql,Django,我想将某些用户的电子邮件id更新为:“前缀”+“用户电子邮件的值” 现在,我可以为一个用户执行以下操作: User.objects.filter(pk=<id>).update(email=Concat(Value("prefix"), 'email')) 我真的不明白错误消息想说什么。任何帮助都将不胜感激 编辑: MySQL版本:5.7.12 Django:1.8你的长什么样?User.objects.filter(pk\uu in=)的结果是什么 在Django 1.10中,我

我想将某些用户的电子邮件id更新为:“前缀”+“用户电子邮件的值”

现在,我可以为一个用户执行以下操作:

User.objects.filter(pk=<id>).update(email=Concat(Value("prefix"), 'email'))
我真的不明白错误消息想说什么。任何帮助都将不胜感激

编辑: MySQL版本:5.7.12 Django:1.8你的
长什么样?
User.objects.filter(pk\uu in=
)的结果是什么

在Django 1.10中,我在运行时没有问题:

>>> User.objects.filter(pk=1).update(first_name='Test')
1L
>>> User.objects.filter(pk__in=[1, 2]).update(first_name='Test')
2L
至于解决方法,显然它没有那么有效,但是为什么不缓存QuerySet,然后迭代它来更新每个对象呢?这是(希望是)一个一次性查询,所以我不确定SQL效率有多重要

User.objects.filter(pk\uu in=).update(email=Concat(值(“前缀”),F(“email”))

我也遇到了同样的问题,但通过尝试将queryset list_id转换为list(),解决了这个问题,如下所示:

ids = Transactions.objects.values_list('id', flat=True)
# This may raise error:
User.objects.filter(pk__in=ids).update(first_name='Test')

# But if convert ids to a list, should work:
list_ids = list(ids)
User.objects.filter(pk__in=list_ids).update(first_name='Test')

希望有帮助:)

这是因为MySQL而不是Django。更多@nik_m有什么办法可以让它工作吗?我不明白为什么它不适用于多个用户,而适用于单个用户。这不是Django的问题,而是MySQL的问题。这对于特定的MySQL版本来说是唯一的吗?这对我使用MySQL 5.5很好。我不知道是哪个版本,但肯定是MySQL的问题。我同意。我想我们需要更多关于OP的MySQL设置的信息。有点怀疑他的单用户示例是否有效,但从多个用户抓取给他带来了麻烦。我想知道实际的查询有多大的不同。编辑这个问题以包括mysql和django版本。我正在使用MySQL 5.7.12和Django 1.8
>>> User.objects.filter(pk=1).update(first_name='Test')
1L
>>> User.objects.filter(pk__in=[1, 2]).update(first_name='Test')
2L
User.objects.filter(pk__in=<list_id>).update(email=Concat(Value("prefix"), F('email')))
ids = Transactions.objects.values_list('id', flat=True)
# This may raise error:
User.objects.filter(pk__in=ids).update(first_name='Test')

# But if convert ids to a list, should work:
list_ids = list(ids)
User.objects.filter(pk__in=list_ids).update(first_name='Test')