【问题标题】:Django Rest Framework TypeError a bytes-like object is required, not 'str'Django Rest Framework TypeError 需要一个类似字节的对象,而不是'str'
【发布时间】:2019-12-02 22:53:03
【问题描述】:

我用 DRF 创建了一个 Rest Api。一切正常,但一个资源(shoppingListItems)总是抛出这个错误:

类型错误

在 /v1/shoppingListItems/

需要一个类似字节的对象,而不是 'str'

请求方法:GET

请求网址:http://localhost:8000/v1/shoppingListItems/

Django 版本:2.2.7

异常类型:TypeError

异常值: 需要一个类似字节的对象,而不是'str'


只有在匹配一个或多个项目时才会出现此问题。如果结果集为空,则没有错误。

这是我的观点.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

这是我的models.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']

我不知道出了什么问题,希望能得到一些帮助。

谢谢。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    这是因为 class ShoppingListItem 中的 status 字段 (BinaryField)

    尝试将其更改CharField

    【讨论】:

    • 解决了这个问题。太感谢了。我花了几个小时寻找这个原因。
    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多