相同代码的结果不同。那为什么呢?
# 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)
SELECT DISTINCT `myuser_myuser`.`area` FROM `myuser_myuser`
# 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
SELECT DISTINCT `prj001_generalinfo`.`hospital` FROM `prj001_generalinfo` ORDER BY `prj001_generalinfo`.`hospital` ASC
user和first:显然,它们是相同的。但是相应的查询是不同的。
我希望用户结果与第一个相同。 而且,第三种形式符合我的要求。
答案 0 :(得分:0)
如果第一个distinct()
查询没有为您提供不同的值,但是第二个查询(具有特定的order_by
子句)则为您提供了默认值,则您在{{ 1}}模型。
您可以使用空的ordering
(或示例中的其他Info
)来禁用默认排序。
原因是用于排序的列包含在SQL查询中,因此即使它们没有返回给用户(导致重复的行)也包含在不同的比较中。 Django docs对此进行了详细解释。