如何解决:值错误,以int()为基数10:“ Shuk”的无效字面量?

时间:2019-09-01 02:26:28

标签: django python-3.x django-rest-framework httpresponse

你好,所以当我尝试列出数据库(api)上的所有Animes对象时,我一直在为这个问题而苦苦挣扎

class AnimesViewSet(viewsets.ModelViewSet):

    permission_classes = [permissions.AllowAny]

    queryset            = Animes.objects.all()
    serializer_class    = AnimesSerializer


    @action(methods=['get'],detail=False)
    def types(self,request):
        return Response(getTypes())


    @action(methods=['get'],detail=False)
    def _action(self,request):
        li = Animes.objects.all().filter(types__icontains='action')
        result_list =  li.values('id', 'title', 'coverLink', 'yearProd', 'rates', 'types', 'story') 
        return Response(result_list)

访问时:

  • localhost:8000 / api / animes / types / =>可以正常工作!
  • localhost:8000 / api / animes / _action / =>可以正常工作!
  • localhost:8000 / api / animes / id / =>(动态动漫ID 1..2..3..etc)可以正常工作!
  • localhost:8000 / api / animes / =>这不起作用(显示我遇到的问题)!

serializer.py:

class AnimesSerializer(serializers.ModelSerializer):
class Meta:
    model   = Animes
    fields  = ('id', 'title', 'coverLink', 'yearProd', 'rates', 'types', 'story')

router.py:

from rest_framework import routers
from .api import AnimesViewSet

router = routers.DefaultRouter()
router.register('animes', AnimesViewSet, 'animes')
urlpatterns = router.urls

models.py:

class Animes(models.Model):
  title = models.TextField()
  animePageLink = models.TextField()
  pageNum = models.IntegerField()
  coverLink = models.TextField()
  yearProd = models.IntegerField()
  rates = models.DecimalField(max_digits=10,decimal_places=1)
  types = models.TextField(null=True)
  story = models.TextField()

  def types_to_list(self):
    return self.types.split(',')

urls.py:

    path('api/',include('animes.router')),

动漫单个实例的示例:

{"id":2,"title":"Mo Dao Zu Shi","coverLink":"https://xxx/test.jpg","yearProd":2018,"rates":"8.6","types":"action,adventure,historical,mystery,supernatural,comedy","story":"test story..."}

我已经尝试过许多在 stackoverflow 上遇到相同问题的人提供的解决方案,但是没有一个对我真正有用!

PS:在Django和Rest Framework上我仍然是新手 〜谢谢你!

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题! 基本上,我将IntegerField类中的field.py的返回值更改为返回值,而不是int(value)..因此,我认为这是数据库中应为int的内容,但不是!

当我检查时发现自己的一个动漫实例具有:“ Shuk”作为 yearProd ,该类型应该是int类型,主要问题是因为我忘记了检查是否当我从外部插入数据时,值是否为int,因此只需更改模型中的字段类型即可解决该问题:

yearProd = models.CharField(max_length=4)

希望这对将来的某人有用。 非常感谢!