Add custom_many_related_field to RelatedField

This commit is contained in:
ByK95 2023-08-27 14:26:15 +03:00
parent 40eccb0d6c
commit 8842e5fd97

View File

@ -92,6 +92,7 @@ class RelatedField(Field):
queryset = None queryset = None
html_cutoff = None html_cutoff = None
html_cutoff_text = None html_cutoff_text = None
custom_many_related_field = None
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.queryset = kwargs.pop('queryset', self.queryset) self.queryset = kwargs.pop('queryset', self.queryset)
@ -137,16 +138,19 @@ class RelatedField(Field):
and child classes in order to try to cover the general case. If you're and child classes in order to try to cover the general case. If you're
overriding this method you'll probably want something much simpler, eg: overriding this method you'll probably want something much simpler, eg:
@classmethod ex:
def many_init(cls, *args, **kwargs):
kwargs['child'] = cls() class SafePrimaryKeyRelatedField(PrimaryKeyRelatedField):
return CustomManyRelatedField(*args, **kwargs) custom_many_related_field = CustomManyRelatedField
will override ManyRelatedField with CustomManyRelatedField
""" """
many_related_field_cls = cls.custom_many_related_field or ManyRelatedField
list_kwargs = {'child_relation': cls(*args, **kwargs)} list_kwargs = {'child_relation': cls(*args, **kwargs)}
for key in kwargs: for key in kwargs:
if key in MANY_RELATION_KWARGS: if key in MANY_RELATION_KWARGS:
list_kwargs[key] = kwargs[key] list_kwargs[key] = kwargs[key]
return ManyRelatedField(**list_kwargs) return many_related_field_cls(**list_kwargs)
def run_validation(self, data=empty): def run_validation(self, data=empty):
# We force empty strings to None values for relational fields. # We force empty strings to None values for relational fields.