Django TypeError不支持+ +''dict'和'int'的操作数类型

时间:2016-05-09 08:29:29

标签: django typeerror manytomanyfield

我创建了一个直通模型,所以我可以在m2m字段中添加一个订单字段,但是我在通过下面的def number()自动递增订单字段时遇到了问题。当我添加一个对象时,我得到TypeError不支持的操作数类型为+:'dict'和'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']

2 个答案:

答案 0 :(得分:1)

aggregate未返回数字,它会以{"order__max": 3}形式返回字典 - 请参阅the docs。你需要从那个字典中提取数字:

return last_order['order__max'] + 1

答案 1 :(得分:1)

正如文档中所提到的,aggregate()返回一个dict对象。因此,变量last_order实际上是一个字典,并且您正在尝试向字典添加数字。

您应该从dict获取值,然后添加。

return last_order['order__max'] + 1