Django TypeError 不支持 + 的操作数类型:'dict' 和 'int'
Django TypeError unsupported operand type(s) for +: 'dict' and 'int'
我创建了一个直通模型,因此我可以将订单字段添加到 m2m 字段,但我在通过下面的 def number() 自动递增订单字段时遇到问题。当我添加一个对象时,我得到 TypeError unsupported operand type(s) for +: 'dict' and 'int' 我不知道为什么。有什么想法吗?
models.py:
class Playlist(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
name = models.CharField(max_length=50)
tracks = models.ManyToManyField(Track, through='PlaylistTrack')
def __str__(self):
return self.name
class PlaylistTrack(models.Model):
def number():
last_order = PlaylistTrack.objects.all().aggregate(Max('order'))
if last_order == None:
return 1
else:
return last_order + 1
track = models.ForeignKey(Track)
playlist = models.ForeignKey(Playlist)
order = models.PositiveIntegerField(default=number)
class Meta:
ordering = ['order']
aggregate
不是 return 数字,它 return 是 {"order__max": 3}
形式的字典 - 请参阅 the docs。您需要从该字典中提取数字:
return last_order['order__max'] + 1
如文档中所述,aggregate()
returns 一个字典对象。因此,变量 last_order
实际上是一个字典,而您正试图向字典添加一个数字。
你应该从字典中获取值,然后添加。
return last_order['order__max'] + 1
我创建了一个直通模型,因此我可以将订单字段添加到 m2m 字段,但我在通过下面的 def number() 自动递增订单字段时遇到问题。当我添加一个对象时,我得到 TypeError unsupported operand type(s) for +: 'dict' and 'int' 我不知道为什么。有什么想法吗?
models.py:
class Playlist(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
name = models.CharField(max_length=50)
tracks = models.ManyToManyField(Track, through='PlaylistTrack')
def __str__(self):
return self.name
class PlaylistTrack(models.Model):
def number():
last_order = PlaylistTrack.objects.all().aggregate(Max('order'))
if last_order == None:
return 1
else:
return last_order + 1
track = models.ForeignKey(Track)
playlist = models.ForeignKey(Playlist)
order = models.PositiveIntegerField(default=number)
class Meta:
ordering = ['order']
aggregate
不是 return 数字,它 return 是 {"order__max": 3}
形式的字典 - 请参阅 the docs。您需要从该字典中提取数字:
return last_order['order__max'] + 1
如文档中所述,aggregate()
returns 一个字典对象。因此,变量 last_order
实际上是一个字典,而您正试图向字典添加一个数字。
你应该从字典中获取值,然后添加。
return last_order['order__max'] + 1