2323from modeltranslation .widgets import ClearableWidgetWrapper
2424
2525from ._typing import Self
26+ from ._compat import is_hidden , clear_ForeignObjectRel_caches
2627
2728SUPPORTED_FIELDS = (
2829 fields .CharField ,
@@ -173,6 +174,9 @@ def __init__(
173174 # (will show up e.g. in the admin).
174175 self .verbose_name = build_localized_verbose_name (translated_field .verbose_name , language )
175176
177+ if self .remote_field :
178+ clear_ForeignObjectRel_caches (self .remote_field )
179+
176180 # M2M support - <rewrite related_name> <patch intermediary model>
177181 if isinstance (self .translated_field , fields .related .ManyToManyField ) and hasattr (
178182 self .remote_field , "through"
@@ -187,7 +191,7 @@ def __init__(
187191 or self .remote_field .model == self .model
188192 ):
189193 self .remote_field .related_name = "%s_rel_+" % self .name
190- elif self .remote_field . is_hidden ( ):
194+ elif is_hidden ( self .remote_field ):
191195 # Even if the backwards relation is disabled, django internally uses it, need to use a language scoped related_name
192196 self .remote_field .related_name = "_%s_%s_+" % (
193197 self .model .__name__ .lower (),
@@ -218,7 +222,7 @@ def __init__(
218222 if hasattr (self .remote_field .model ._meta , "_related_objects_cache" ):
219223 del self .remote_field .model ._meta ._related_objects_cache
220224
221- elif self .remote_field and not self .remote_field . is_hidden ( ):
225+ elif self .remote_field and not is_hidden ( self .remote_field ):
222226 current = self .remote_field .get_accessor_name ()
223227 # Since fields cannot share the same rel object:
224228 self .remote_field = copy .copy (self .remote_field )
@@ -481,17 +485,3 @@ def __set__(self, instance, value):
481485 loc_field_name = build_localized_fieldname (self .field_name , get_language ())
482486 loc_attname = instance ._meta .get_field (loc_field_name ).get_attname ()
483487 setattr (instance , loc_attname , value )
484-
485-
486- class LanguageCacheSingleObjectDescriptor :
487- """
488- A Mixin for RelatedObjectDescriptors which use current language in cache lookups.
489- """
490-
491- accessor = None # needs to be set on instance
492-
493- def get_cache_name (self ) -> str :
494- """
495- Used in django > 2.x
496- """
497- return build_localized_fieldname (self .accessor , get_language ()) # type: ignore[arg-type]
0 commit comments