为什么这两种方式会产生不同的结果?(Django Rest Framework 3.9)

问题描述 投票:0回答:1

相同代码的结果不同。所以为什么?

# prj001 is the app name

# MyUser 
class MyUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True,)
    phone = models.CharField(max_length=20, unique=True)
    area = models.CharField(max_length=100,
                            null=True)
    ...

users = MyUser.objects.values('area').distinct()  # user

# Generalinfo 
class GeneralInfo(models.Model):
    owner = models.ForeignKey('myuser.MyUser',
                              null=True,
                              related_name='mygi',
                              on_delete=models.CASCADE)
    hospital = models.CharField(max_length=100)
    ...

info_one = Info.objects.values('hospital').distinct()    # first

print(info_one.query)

info_two = Info.objects.order_by('hospital').values('hospital').distinct()  # second

print(info_two.query)
  1. 用户:
SELECT DISTINCT `myuser_myuser`.`area` FROM `myuser_myuser`

  1. 第一:
# recdate is a DateField
# recdate = models.DateField(default=date.today)
SELECT DISTINCT `prj001_generalinfo`.`hospital`, `prj001_generalinfo`.`recdate`, `prj001_generalinfo`.`id` FROM `prj001_generalinfo` ORDER BY `prj001_generalinfo`.`recdate` DESC, `prj001_generalinfo`.`id` DESC

  1. 第二:
SELECT DISTINCT `prj001_generalinfo`.`hospital` FROM `prj001_generalinfo` ORDER BY `prj001_generalinfo`.`hospital` ASC

用户和第一:显然,他们是一样的。但相应的查询是不同的。

我想用户的结果与第一个相同。而且,第三种形式符合我的要求。

python django
1个回答
0
投票

如果第一个distinct()查询没有给出不同的值,但是第二个(使用特定的order_by子句),则在ordering模型中定义了默认的Info

您可以使用空order_by()(或示例中的不同order_by)来禁用默认排序。

原因是用于排序的列包含在SQL查询中,因此即使它们没有返回给用户也会进行不同的比较(导致重复的行)。 Django docs广泛地解释了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.