WHERE 절에서 사용자 지정 문을 전달하는 추가 메서드를 사용하여 하나의 쿼리에서이 작업을 수행 할 수 있습니다. 구문은 MySQL의 이외의 백엔드에 다소 차이가있을 수 있습니다
f = {
'user_table': User._meta.db_table,
'action_table': Action._meta.db_table,
'user_id': User._meta.pk.get_attname_column()[1],
'user_fk': Action._meta.get_field('user').get_attname_column()[1],
'timestamp': Action._meta.get_field('timestamp').get_attname_column()[1],
}
query = "(SELECT COUNT(*) FROM %(action_table)s \
WHERE %(action_table)s.%(user_fk)s = %(user_table)s.%(user_id)s \
AND DAYOFWEEK(%(action_table)s.%(timestamp)s IN (1,7)) \
<= (SELECT COUNT(*) FROM %(action_table)s \
WHERE %(action_table)s.%(user_fk)s = %(user_table)s.%(user_id)s \
AND DAYOFWEEK(%(action_table)s.%(timestamp)s) NOT IN (1,7))" % f
users = User.objects.extra(where=[query]))
이 MySQL의 예는 주말 동안 작업의 수는 다른 날보다 작거나 행동의 수와 같다 모든 사용자를 선택합니다. 물론 상황에 따라 테이블과 컬럼 이름을 변경해야합니다.
참조 http://stackoverflow.com/questions/4600325/django-datefield-filter-by-weekday-weekend –
@PaulTomblin 저는 평일까지 간단하게 선택하는 방법을 알고 있지만 더 많은 작업이있는 사용자를 효율적으로 선택해야합니다. 주말에는 다른 날보다. – Shark
평일까지 선택을 작성한 후에'.count()'를 할 수 없습니까? –