У меня есть класс ModelSerializer, в котором я хочу принять список элементов или один элемент (словарь) в качестве данных. В документации указано, что передача «много», как True, будет поддерживать мое требование.ModelSerializer с данными как список
class PointSerializer(serializers.ModelSerializer):
class Meta:
model = Point
def __init__(self, *args, **kwargs):
if "data" in kwargs:
if isinstance(kwargs["data"]):
kwargs["many"] = True
super(PointSerializer, self).__init__(*args, **kwargs)
Теперь, обеспечивая словарь данных следующим образом работы:
p = PointSerializer(data={'x':10, 'y': 12})
p.is_valid() # True
Но это, со списком словарей, не удается:
p = PointSerializer(data=[{'x':10, 'y':12}, {'x':12, 'y':12}])
p.is_valid() # False
p.errors() # {'non_field_errors': ['Invalid data. Expected a dictionary, but got a list.']}
UPDATE:
Спасибо к выбранному ответу, я изменил свой код на followi нг и она отлично работает:
class PointSerializer(serializers.ModelSerializer):
class Meta:
model = Point
>>> ps = PointSerializer(data={'x':10, 'y':12})
>>> ps.is_valid()
... True
>>> ps = PointSerializer(data=[{'x':10, 'y':12}, {'x':12, 'y':12}], many=True)
>>> ps.is_valid()
... True