Django rest framework:__str__ returned non-string (type NoneType) 真正原因


出錯原因:

  用戶表是Django中核心的表,當這個表類字段中有一個這樣的函數

def __str__(self):
    return self.name

  在Django用戶表設計時候有個字段容易犯這個失誤,雖然表字段約束沒錯

name = models.CharField(max_length=30, null=True, blank=True, verbose_name='姓名')

  也就是說這個字段可以為空,也就是說用 __str__ 函數返回時候,為空,什么都么有,報類型錯誤

那,如何解決?

  在使用 __str__返回函數時候,指定的字段不能為空,也就是有兩個方式,一個是設置這個字段不能為空,並設置一個默認值,另一個方式是更改一個不為空的返回字段

name = models.CharField(max_length=30, default='', verbose_name='姓名')

  

def __str__(self):
    return self.username

  最優雅的解決方案為

    def __str__(self):
        if self.name:
            # 如果不為空則返回用戶名
            return self.name
        else:
            # 如果用戶名為空則返回不能為空的對象
            return self.username

 總結:

  這個是我用戶表錯誤,本質上問題是__str__不能返回空類型數據,也就是說,這個返回數據不能是空字段的數據,在其他表設計時候,也需要注意這個問題,最好不要指定返回一個為空和default=''數據,雖然default=''是可以返回的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM