我正在编写一个django应用程序,我必须从中选择一行,并从其datetimefield列中包含相同日期的多行中排除其余行。
我的模特是:
class Model(models.Model):
user_id = models.IntegerField()
datetime = models.DateTimeField()
我想从每个日期中只选择一个用户。以下是我选择所有行的方法:
data = Model.objects.all()
如何从datetimefield中的每个日期中仅选择一个用户?
答案 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 +
,则可以使用TruncDatedata = Model.objects.all().annotate(date=TruncDay('datetime').distinct('date')
没有distinct
你可以使用这个黑客:
data = Model.objects.all().extra({'date': 'date(datetime)'}).values("data").annotate(Max("user_id"))