无法理解SerializerRelated字段CustomSlugRelatedField

问题描述

很久以前,我已经编写了一个CustomSlugrelatedField类。我记不清它的目的是什么,因为SlugrelatedField和CustomSlugrelatedField具有相同的功能

class CustomSlugrelatedField(serializers.SlugrelatedField):

    def __init__(self,*args,**kwargs):
        # Instantiate the superclass normally
        query_field = kwargs.pop('query_field',None)
        
        super(CustomSlugrelatedField,self).__init__(*args,**kwargs)

        if query_field:
            self.query_field = query_field
        else:
            self.query_field = self.slug_field
    
    def to_internal_value(self,data):
        try:
            return self.get_queryset().get(**{self.query_field: data})
        except ObjectDoesNotExist:
            self.fail('does_not_exist',query_field=self.query_field,value=smart_text(data))
        except (TypeError,ValueError):
            self.fail('invalid')

解决方法

通过将此代码与source code进行比较,我想您在这里传递了一个附加字段名称query_fieldslug_field,可用于从查询集中获取对象。用法可能是这样的:

class YourSerializer(serializers.ModelSeirlaizer):
     some_field = CustomSlugRelatedField(query_field='some_field',slug_field="something_else")

但是,由于您已经有slug_field为您做同样的事情,因此感到多余。