2016-05-09 53 views
0

我创建了一个通过模型,所以我可以向m2m字段添加一个订单字段,但我遇到问题,通过def number自动递增订单字段()。当我添加一个对象时,我得到TypeError不受支持的操作数类型(+):'dict'和'int',我不知道为什么。有任何想法吗?Django 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'] 

回答

1

如文档提到,aggregate()返回一个字典对象。因此,变量last_order实际上是一个字典,你正试图给字典添加一个数字。

你应该从字典中获得值然后添加。

return last_order['order__max'] + 1 
1

aggregate没有返回一个数字,它返回的形式{"order__max": 3}词典 - 见the docs。你需要从字典中提取号码:

return last_order['order__max'] + 1 
相关问题