Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 6897)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -209,7 +209,7 @@
 
     def get_db_prep_lookup(self, lookup_type, value):
         "Returns field's value prepared for database lookup."
-        if lookup_type in ('exact', 'regex', 'iregex', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'):
+        if lookup_type in ('exact', 'regex', 'iregex', 'gt', 'gte', 'lt', 'lte', 'year', 'month', 'day', 'search'):
             return [value]
         elif lookup_type in ('range', 'in'):
             return value
@@ -223,12 +223,6 @@
             return ["%%%s" % prep_for_like_query(value)]
         elif lookup_type == 'isnull':
             return []
-        elif lookup_type == 'year':
-            try:
-                value = int(value)
-            except ValueError:
-                raise ValueError("The __year lookup type requires an integer argument")
-            return ['%s-01-01 00:00:00' % value, '%s-12-31 23:59:59.999999' % value]
         raise TypeError("Field has invalid lookup: %s" % lookup_type)
 
     def has_default(self):
Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 6897)
+++ django/db/models/query.py	(working copy)
@@ -807,9 +807,9 @@
             return '%s IN (%s)' % (field_sql, in_string)
         else:
             raise EmptyResultSet
-    elif lookup_type in ('range', 'year'):
+    elif lookup_type == 'range':
         return '%s BETWEEN %%s AND %%s' % field_sql
-    elif lookup_type in ('month', 'day'):
+    elif lookup_type in ('year', 'month', 'day'):
         return "%s = %%s" % connection.ops.date_extract_sql(lookup_type, field_sql)
     elif lookup_type == 'isnull':
         return "%s IS %sNULL" % (field_sql, (not value and 'NOT ' or ''))
