2016-10-10 87 views
0

我仍然是django的初學者。Django'ascii'編解碼器無法編碼字符u' uff1f'

當我保存到數據庫,我得到了這個錯誤。

「ASCII」編解碼器不能在14位編碼字符U「\ uff1f」:序號 不在範圍內(128)

我在這裏看到了類似的問題,雖然,但我曾嘗試和它仍然不好。

UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)

我相信它在這個數據[ '英語']發生。

我應該改變views.py或序列化程序?

我的看法是

class DialogueView(APIView): 
    permission_classes = (IsAuthenticated,) 

    def post(self, request): 

     data = request.data 
     serializer = DialogueSerializer(data=request.data) 
     if not serializer.is_valid(): 
      return Response(serializer.errors, status= 
       status.HTTP_400_BAD_REQUEST) 
     else: 
      owner = request.user 
      t = Dialogue(owner=owner, english=data['english']) 
      t.save() 
      # request.data['id'] = t.pk # return id 
      return Response(status=status.HTTP_201_CREATED) 

我的串行是

class DialogueSerializer(serializers.ModelSerializer): 

    sound_url = serializers.SerializerMethodField() 

    class Meta: 
     model = Dialogue 
     fields = ('id','english','myanmar', 'sound_url') 

    def get_sound_url(self, dialogue): 
     if not dialogue.sound: 
      return None 

     request = self.context.get('request') 
     sound_url = dialogue.sound.url 
     return request.build_absolute_uri(sound_url) 
+0

哪個版本的python? –

+0

我正在使用python 2.7 –

+0

在序列化程序和視圖文件的第一行是否有魔法註釋'#coding:utf-8'? –

回答

0

這可能是數據庫不接受Unicode值作爲一個字符串字段。

爲了解決這個問題,嘗試兩種方式:

  1. 更改DB配置爲使用Unicode編碼。例如。用於mysql的This post

  2. 在存儲到數據庫之前對該unicode值進行編碼。嘗試轉換這樣的值: val = data['English'] 並將val存儲到您的模型中。

+0

謝謝。我將通讀大約1.你能詳細解釋2嗎?這是因爲我已經閱讀了一些鏈接進行編碼,並不是很好。我不確定它是否發生在視圖或序列化器中。 –

+0

您可以將模型的'save'函數中的編碼轉換爲[本問題]中所述(http://stackoverflow.com/questions/4269605/django-override-save-for-model) – SolessChong

相關問題