我有型号:
class PhotoAlbum(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, auto_created=True)
name = models.CharField(max_length=50, verbose_name='Album name')
type = models.ForeignKey(AlbumType, on_delete=models.CASCADE, verbose_name='Album type')
created_at = models.DateTimeField(auto_now_add=True)
我有这个代码:
print(PhotoAlbum.objects.all().first())
print(PhotoAlbum.objects.all()[:1].get())
在我看来,应该显示相同的对象,但返回不同的对象。
怎么回事,这不是一模一样的设计吗?
如果查询集未排序,则 first() 按主键对查询集排序
from django.db import connection
Pet.objects.all().first()
print(connection.queries[-1]['sql'])
# SELECT ... FROM <table> ORDER BY <table>."id" ASC LIMIT 1
但是切片查询集不会执行这样的默认排序
from django.db import connection
Pet.objects.all()[:1].get()
print(connection.queries[-1]['sql'])
# SELECT ... FROM <table> ASC LIMIT 1