Skip to main content
 首页 » 编程设计

python之Django : Type Mismatch Error in models. py

2025年05月04日36kuangbin

当我在 python3 manage.py shell 中执行这些行时:

In [1]: from dream_site.models import Mentor, Mentee, Team 
In [2]: a = Mentee.objects.get( pk = 1 ).name 
In [3]: b = Mentor.objects.get(pk=1).name 
In [4]: print( a + b ) 

它按预期打印正确的输出,但是在 models.py 中,当我有以下代码时,它告诉我 int() 参数必须是字符串或数字错误:

def __str__(self):     # Belonging to Team object 
    return ( str( self.pk ) + " - " +  Mentor.objects.get( pk = self.mentor_id ).name   + " - " +  Mentee.objects.get( pk = self.mentee_id ).name   ) 

这是错误发生的地方。即使它在 shell 中将这些显示为 str 类型。
models.py 的其他部分:

class Mentor(models.Model): 
    mentor_id =     models.AutoField( primary_key = True ) 
    name =          models.CharField( default = '', max_length = 254 ) 
 
class Mentee(models.Model): 
    mentee_id =     models.AutoField( primary_key = True ) 
    name =          models.CharField( default = '', max_length = 254 ) 
 
class Team(models.Model): 
    team_id =                       models.AutoField( primary_key = True ) 
    mentor_id =                     models.ForeignKey( Mentor ) 
    mentee_id =                     models.ForeignKey( Mentee ) 
    team_since =                    models.DateTimeField( default = django.utils.timezone.now, blank = True ) 

请您参考如下方法:

您因使用错误的命名约定而感到困惑。

在团队中,mentor_id 和 mentee_id 不是 ID。它们是实际的 Mentor 和 Mentee 对象。因此,在您的 __str__ 方法中,您尝试使用 mentee_id 的值查询 Mentee 类,实际上是将现有的 Mentee 对象传递给查询。没有必要这样做。

你的字段应该叫做mentor和mentee,你应该直接在你的方法中使用它们:

return str(self.pk) + " - " +  self.mentor.name   + " - " +  self.mentee.name 

或者更好的是,使用字符串插值:

return "%s - %s - %s" %  (self.pk, self.mentor.name, self.mentee.name)