出錯原因:
用戶表是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=''是可以返回的