Я использую Django 2.2, Python 3.7, структуру Django rest и pytest. Я хочу написать модульный тест, чтобы увидеть, может ли мой сериализатор создать мою модель. Мой тест выглядит так ...
@pytest.mark.django_db
def test_coop_create(self):
""" Test coop serizlizer model """
state = StateFactory()
serializer_data = {
"name": "Test 8899",
"types": [
{"name": "Library"}
],
"address": {
"formatted": "222 W. Merchandise Mart Plaza, Suite 1212",
"locality": {
"name": "Chicago",
"postal_code": "60654",
"state_id": state.id
}
},
"enabled": "true",
"phone": "7739441426",
"email": "myemail",
"web_site": "http://www.1871.com/"
}
serializer = CoopSerializer(data=serializer_data)
serializer.is_valid()
print(serializer.errors())
assert serializer.is_valid(), serializer.errors()
result = serializer.save()
print(result)
Однако «serializer.errors ()» производит вывод
TypeError: 'ReturnDict' object is not callable
Я не понимаю, почему и как отлаживать дальше. Код моего сериализатора -
class CoopSerializer(serializers.ModelSerializer):
types = CoopTypeSerializer(many=True)
address = AddressTypeField()
class Meta:
model = Coop
fields = ['id', 'name', 'types', 'address', 'phone', 'enabled', 'email', 'web_site']
extra_kwargs = {
'phone': {
'required': False,
'allow_blank': True
}
}
def to_representation(self, instance):
rep = super().to_representation(instance)
rep['types'] = CoopTypeSerializer(instance.types.all(), many=True).data
rep['address'] = AddressSerializer(instance.address).data
return rep
def create(self, validated_data):
#"""
#Create and return a new `Snippet` instance, given the validated data.
#"""
coop_types = validated_data.pop('types', {})
instance = super().create(validated_data)
for item in coop_types:
coop_type, _ = CoopType.objects.get_or_create(name=item['name']) #**item)
instance.types.add(coop_type)
return instance
, а код базовой модели - ...
class Coop(models.Model):
objects = CoopManager()
name = models.CharField(max_length=250, null=False)
types = models.ManyToManyField(CoopType)
address = AddressField(on_delete=models.CASCADE)
enabled = models.BooleanField(default=True, null=False)
phone = PhoneNumberField(null=True)
email = models.EmailField(null=True)
web_site = models.TextField()
Вот ссылка на GitHub, если вы действительно хотите сходить с ума - https://github.com/chicommons/maps/tree/master/web.