当我在这些行中执行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)
你使用错误的命名约定让自己感到困惑.
在团队,mentor_id并且mentee_id都没有编号.它们是实际Mentor和Mentee对象.因此__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)