Django Rest Framework TypeError需要一个类似字节的对象,而不是'str'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Rest Framework TypeError需要一个类似字节的对象,而不是'str'相关的知识,希望对你有一定的参考价值。
我已经用DRF创建了一个Rest Api。一切正常,但是一个资源(shoppingListItems)总是抛出此错误:
TypeError
在/ v1 / shoppingListItems /
需要一个类似字节的对象,而不是'str'
请求方法:GET
请求网址:http://localhost:8000/v1/shoppingListItems/
Django版本:2.2.7
异常类型:TypeError
例外值:需要一个类似字节的对象,而不是'str'
仅当一项或多项匹配时,才会出现此问题。如果结果集为空,则没有错误。
这是我的views.py:
class ShoppingListViewSet(viewsets.ModelViewSet):
queryset = ShoppingList.objects.all()
serializer_class = ShoppingListSerializer
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
class ShoppingListItemViewSet(viewsets.ModelViewSet):
queryset = ShoppingListItem.objects.all()
serializer_class = ShoppingListItemSerializer
这是我的模型。py:
class Item(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class ShoppingList(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
members = models.ManyToManyField(User, through='Membership')
items = models.ManyToManyField(Item, through='ShoppingListItem')
def __str__(self):
return self.name
class ShoppingListItem(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
shoppinglist = models.ForeignKey(ShoppingList, on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
amount = models.IntegerField()
price = models.FloatField(null=True)
status = models.BinaryField()
这是我的serializers.py:
class ItemSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Item
fields = ['id', 'name']
class ShoppingListSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ShoppingList
fields = ['id', 'name', 'members']
class ShoppingListItemSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ShoppingListItem
fields = ['id', 'shoppinglist', 'item', 'amount', 'price', 'status']
我不知道出了什么问题,希望能得到一些帮助。
谢谢。
答案
这是由于class ShoppingListItem中的状态字段(BinaryField)。
尝试更改它
到CharField以上是关于Django Rest Framework TypeError需要一个类似字节的对象,而不是'str'的主要内容,如果未能解决你的问题,请参考以下文章
17-Django-Django REST framework-REST framework及RESTful简介
为啥 django-rest-framework 不显示 OneToOneField 数据 - django