如何从datetimefield中具有公共日期的行中只选择一行?

时间:2017-09-01 10:37:24

标签: mysql django django-queryset

我正在编写一个django应用程序,我必须从中选择一行,并从其datetimefield列中包含相同日期的多行中排除其余行。

我的模特是:

class Model(models.Model):
    user_id = models.IntegerField()
    datetime = models.DateTimeField()

我想从每个日期中只选择一个用户。以下是我选择所有行的方法:

data = Model.objects.all()

如何从datetimefield中的每个日期中仅选择一个用户?

2 个答案:

答案 0 :(得分:0)

你可以试试这个,

data = Model.objects.all()

date_list = list(set([element.datetime.date() for element in data])) 

for date in date_list:  
obj = Model.objects.filter(datetime__date=date).first()
if isinstance(obj, Model): 
    user_list.append(obj.user_id)

return user_list

我希望这会有所帮助。

答案 1 :(得分:0)

如果您希望每个日期时间选择一个用户,则可以使用此

data = Model.objects.all().distinct('datetime')

如果您希望每个日期选择一个用户,则可以使用此

data = Model.objects.all().extra({'date': 'date(datetime)'}).distinct('date')
  

date - SQL函数可能依赖于您使用的SQL Server

如果您使用django 1.10 +

,则可以使用TruncDate
data = Model.objects.all().annotate(date=TruncDay('datetime').distinct('date')

没有distinct你可以使用这个黑客:

data = Model.objects.all().extra({'date': 'date(datetime)'}).values("data").annotate(Max("user_id"))