问题描述
很久以前,我已经编写了一个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_field
和slug_field
,可用于从查询集中获取对象。用法可能是这样的:
class YourSerializer(serializers.ModelSeirlaizer):
some_field = CustomSlugRelatedField(query_field='some_field',slug_field="something_else")
但是,由于您已经有slug_field
为您做同样的事情,因此感到多余。