TypeError: Field 'facebook_reactions' expected a number but got <class 'rest_framework.fields.IntegerField'>
TypeError: Field 'facebook_reactions' expected a number but got <class 'rest_framework.fields.IntegerField'>
我在测试 EventViewSet 时遇到问题。我收到以下错误
TypeError: Field 'facebook_reactions' expected a number but got <class 'rest_framework.fields.IntegerField'>.
这是我的测试运行:
class EventViewSetTest(BaseTestCase):
def test_event_created(self):
event_data = {
"url": "www.example.com",
"tweet_text": "Event successful",
"facebook_reactions": 2,
}
response = self.client.post("/api/events/", event_data)
self.assertEqual(status.HTTP_201_CREATED,response.status_code)
这是我的 views.py:
class EventViewSet(ModelViewSet):
queryset = Event.objects.all()
def get_serializer_class(self):
if self.action == "create":
return serializers.EventCreateSerializer
return serializers.EventSerializer
def perform_create(self, serializer):
Event.objects.create(
url=Link.objects.get_or_create(url=serializer.url)[0],
tweet_text=serializer.tweet_text,
facebook_reactions=serializer.facebook_reactions,
)
这是我的 serializers.py:
class EventCreateSerializer(serializers.Serializer):
url = serializers.URLField
tweet_text = serializers.CharField
facebook_reactions = serializers.IntegerField
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ["url", "tweet_text", "facebook_reactions"]
将不胜感激。
谢谢!
您需要调用字段的构造函数,因此:
class EventCreateSerializer(serializers.Serializer):
url = serializers.URLField<strong>()</strong>
tweet_text = serializers.CharField<strong>()</strong>
facebook_reactions = serializers.IntegerField<strong>()</strong>
至于perform_create
,你需要处理数据.validated_data
,所以:
class EventViewSet(ModelViewSet):
# …
def perform_create(self, serializer):
<strong>data = serializer.validated_data</strong>
Event.objects.create(
url=Link.objects.get_or_create(url=data['url'])[0],
tweet_text=data['tweet_text'],
facebook_reactions=data['facebook_reactions'],
)
我在测试 EventViewSet 时遇到问题。我收到以下错误
TypeError: Field 'facebook_reactions' expected a number but got <class 'rest_framework.fields.IntegerField'>.
这是我的测试运行:
class EventViewSetTest(BaseTestCase):
def test_event_created(self):
event_data = {
"url": "www.example.com",
"tweet_text": "Event successful",
"facebook_reactions": 2,
}
response = self.client.post("/api/events/", event_data)
self.assertEqual(status.HTTP_201_CREATED,response.status_code)
这是我的 views.py:
class EventViewSet(ModelViewSet):
queryset = Event.objects.all()
def get_serializer_class(self):
if self.action == "create":
return serializers.EventCreateSerializer
return serializers.EventSerializer
def perform_create(self, serializer):
Event.objects.create(
url=Link.objects.get_or_create(url=serializer.url)[0],
tweet_text=serializer.tweet_text,
facebook_reactions=serializer.facebook_reactions,
)
这是我的 serializers.py:
class EventCreateSerializer(serializers.Serializer):
url = serializers.URLField
tweet_text = serializers.CharField
facebook_reactions = serializers.IntegerField
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ["url", "tweet_text", "facebook_reactions"]
将不胜感激。
谢谢!
您需要调用字段的构造函数,因此:
class EventCreateSerializer(serializers.Serializer):
url = serializers.URLField<strong>()</strong>
tweet_text = serializers.CharField<strong>()</strong>
facebook_reactions = serializers.IntegerField<strong>()</strong>
至于perform_create
,你需要处理数据.validated_data
,所以:
class EventViewSet(ModelViewSet):
# …
def perform_create(self, serializer):
<strong>data = serializer.validated_data</strong>
Event.objects.create(
url=Link.objects.get_or_create(url=data['url'])[0],
tweet_text=data['tweet_text'],
facebook_reactions=data['facebook_reactions'],
)