【问题标题】:Django TypeError unsupported operand type(s) for +: 'dict' and 'int'Django TypeError 不支持 + 的操作数类型:“dict”和“int”
【发布时间】:2016-09-03 19:21:12
【问题描述】:

我创建了一个直通模型,因此我可以向 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']

【问题讨论】:

    标签: django typeerror manytomanyfield


    【解决方案1】:

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

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

    return last_order['order__max'] + 1
    

    【讨论】:

      【解决方案2】:

      aggregate 不返回数字,它返回{"order__max": 3} 形式的字典 - 请参阅the docs。您需要从该字典中提取数字:

      return last_order['order__max'] + 1
      

      【讨论】:

        猜你喜欢
        • 2022-08-10
        • 1970-01-01
        • 2017-12-27
        • 2014-03-31
        • 2012-12-12
        • 2020-02-27
        • 2021-05-23
        • 2016-04-15
        • 2019-01-12
        相关资源
        最近更新 更多