@@ -66,6 +66,9 @@ class GenericForeignFileField(GenericRelation):
6666 generic_descriptor = None
6767 file_descriptor = None
6868
69+ empty_strings_allowed = True
70+ rel_class = GenericRel
71+
6972 file_descriptor_cls = FileDescriptor
7073 file_field_cls = models .FileField
7174 rel_file_field_name = 'file'
@@ -134,6 +137,9 @@ def __init__(self, to, rel_file_field_name=None, field_identifier="",
134137
135138 self .file_kwargs ['db_column' ] = kwargs .get ('db_column' , self .name )
136139
140+ def get_cache_name (self ):
141+ return self .name
142+
137143 def get_cached_value (self , instance , ** kwargs ):
138144 cache_name = self .get_cache_name ()
139145 if django .VERSION > (2 , 0 ):
@@ -219,6 +225,16 @@ def is_cached(self, instance):
219225 return hasattr (instance , self .get_cache_name ())
220226
221227 def get_prefetch_queryset (self , instances , queryset = None ):
228+ if queryset is None :
229+ return self .get_prefetch_querysets (instances )
230+ return self .get_prefetch_querysets (instances , [queryset ])
231+
232+ def get_prefetch_querysets (self , instances , querysets = None ):
233+ if querysets is not None :
234+ raise Exception (
235+ "Passing querysets in generic_plus get_prefetch_querysets is "
236+ "not yet supported"
237+ )
222238 models = set ([type (i ) for i in instances ])
223239
224240 # Handle case where instances are different models (and consequently,
@@ -401,7 +417,15 @@ def __get__(self, instance, instance_type=None):
401417 'prefetch_cache_name' : self .field .attname ,
402418 }
403419
404- join_cols = self .field .get_joining_columns (reverse_join = True )[0 ]
420+ if hasattr (self .field , "get_joining_fields" ):
421+ join_cols = tuple (
422+ (lhs_field .column , rhs_field .column )
423+ for lhs_field , rhs_field in self .field .get_joining_fields (
424+ reverse_join = True
425+ )
426+ )[0 ]
427+ else :
428+ join_cols = self .field .get_joining_columns (reverse_join = True )[0 ]
405429
406430 ct_manager = ContentType .objects .db_manager (instance ._state .db )
407431 content_type = ct_manager .get_for_model (instance , for_concrete_model = self .for_concrete_model )
0 commit comments