【发布时间】:2017-03-29 19:32:31
【问题描述】:
我有一组指令来查询我的数据库,我想知道这些指令是否可以以一种紧凑的方式作为查询表达式,所以我有一个模型,它有一个名为 solapin 的字段,如您在此处看到的:
class Question(models.Model):
question_text = models.CharField(max_length=200)
...
solapin = models.CharField(max_length=250)
def __str__(self): # __unicode__ on Python 2
return self.solapin
并且我想更改每个 Question 对象的 solapin 字段,其 solapin 具有 0 到 9 个字符,将每个人的 10 和当前 solapin 长度之间的差异添加为“0”字符你可以在这里看到:
from appname.models import Question
resultset = Question.objects.filter(solapin__iregex=r'^.{0,9}$')
for item in resultset:
diff = 10 - len(item.solapin)
item.solapin = "0"*diff + item.solapin
item.save()
这对我来说非常有效,但我想看看是否可以改进它。
【问题讨论】:
-
您可能需要重新格式化您的代码来帮助我们,因为缩进似乎存在问题,如果行尾没有分号会更好。
-
@quamrana : 抱歉,有分号,因为我在同一行中有所有说明
-
好的,我想我可以看到你在做什么。第一个问题是:
item.solapin = ...行是否为solapin分配了一个新字符串,它不再是CharField是否重要? -
@quamrana :给
item.solapin分配了一个字符串,如您所见,此操作"0"*diff + item.solapin在末尾变成一个字符串,例如:当前solapin之一我在我的数据库是456,所以它与我的查询匹配,这个变量diff是7,所以"0"*7等于"0000000",所以最后item.solapin是"0000000456"跨度>
标签: python django django-queryset