Django:models.py中的类型不匹配错误

Meg*_*Ray 1 python django

当我在这些行中执行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 )
Run Code Online (Sandbox Code Playgroud)

它会按预期打印正确的输出,但是models.py当我有以下代码时,它会给我int() argument must be a string or a number错误:

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   )
Run Code Online (Sandbox Code Playgroud)

这是发生错误的地方.即使它str在shell中将它们显示为类型.
其他部分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 )
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 6

你使用错误的命名约定让自己感到困惑.

在团队,mentor_id并且mentee_id没有编号.它们是实际MentorMentee对象.因此__str__,在您尝试使用值查询Mentee类的方法中mentee_id,您实际上是将现有的Mentee对象传递给查询.没有必要这样做.

你的领域应该叫mentor并且mentee,你应该直接在你的方法使用它们:

return str(self.pk) + " - " +  self.mentor.name   + " - " +  self.mentee.name
Run Code Online (Sandbox Code Playgroud)

甚至更好,使用字符串插值:

return "%s - %s - %s" %  (self.pk, self.mentor.name, self.mentee.name)  
Run Code Online (Sandbox Code Playgroud)