我的模型如下:
class Photos(models.Model):
id = models.IntegerField(primary_key=True, default=1)
name = models.CharField(max_length=500)
size = models.IntegerField()
path = models.CharField(max_length=500)
date = models.DateField(default=datetime.now)
def __str__(self):
return self.date.strftime('%Y-%m-%d')
class Meta:
verbose_name_plural = "Photos"
我要从数据库(PostgreSQL)中检索最后一个主键,如下所示:
try:
last_inserted = Photos.objects.order_by('-id')[0]
print(last_inserted)
except IndexError:
print("No data in the database")
但是我总是从date列中获得一个日期,而不是主键,这真的很奇怪!打印last_inserted给我'2018-09-04'。 作为测试,我将“ id”列更改为lang(表中不存在)给出以下错误消息:
Cannot resolve keyword 'lang' into field. Choices are: date, id, name, path, size
在以上消息中,为什么日期先出现然后是id,依此类推..!
请帮助!
答案 0 :(得分:1)
print(last_inserted)
将向您显示模型的__str__
方法的结果。要查看id
,可以更改模型:
class Photos(models.Model):
id = models.IntegerField(primary_key=True, default=1)
name = models.CharField(max_length=500)
size = models.IntegerField()
path = models.CharField(max_length=500)
date = models.DateField(default=datetime.now)
def __str__(self):
return str(self.id)
class Meta:
verbose_name_plural = "Photos"
或者仅更改查询以使用values_list
仅选择id
字段:
last_inserted = Photos.objects.order_by('-id').values_list('id', flat=True)[0]
print(last_inserted)
至于
在以上消息中,为什么日期先出现然后是id,依此类推..!
我想是因为字母顺序。
答案 1 :(得分:0)
您也可以这样尝试。短一点
Photos.objects.order_by('-id').first().id
还有一个last()