当我在 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)
关于python - Django : Type Mismatch Error in models. py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31630095/