Django models.Model所有列值以L结尾?

时间:2013-04-27 22:47:40

标签: python database django

在教程1中使用shell的文档教程文档中,它向您展示了如何查看模型对象的值。当我使用model_object.__dict__查看所有列及其值时,一切都以L结尾,这使得从数据库中提取数据变得困难,因为我必须在使用L时添加filter(), get()

型号代码

class App(models.Model):
    title = models.CharField(max_length=200)
    downloads = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    dislikes = models.IntegerField(default=0)
    pub_date = models.DateTimeField('pub date', default=datetime.datetime.now)

python manage.py shell

In [11]: app = App.objects.get(title="Game1")

In [12]: app
Out[12]: <app: Game1>  

In [13]: app.__dict__
Out[13]: 
{'_state': <django.db.models.base.ModelState at 0x3a20810>,
 'dowloads': 173L,
 'dislikes': 0L,
 'id': 1L,
 'likes': 0L,
 'pub_date': datetime.datetime(2013, 4, 27, 22, 30, 42, tzinfo=<UTC>),
 'title': u'Game1'}

1 个答案:

答案 0 :(得分:3)

您无需在致get()filter()的电话中加入L. L只表示变量的类型为long,而不是常规整数,但实际上变量只包含数字,同样适用于数据库 - 它只存储数字。因此,您可以使用App.objects.get(id=1)App.objects.filter(downloads__gte=100),而无需担心变量是否很长。

事实上,python在打印longs时内部附加L:

In [12]: a = long(12321312)
In [13]: a
Out[13]: 12321312L

不会阻止它与常规integerers比较long:

In [14]: a > 123
Out[14]: True