2016-05-09 19 views
0

m2mフィールドに注文フィールドを追加できるようにスルーモデルを作成しましたが、defフィールドを使用して注文フィールドを自動的にインクリメントする問題があります。 ()をクリックします。オブジェクトを追加すると、TypeErrorがサポートされていないオペランドの型が+: 'dict'と 'int'になってしまい、その理由がわかりません。何か案は?+: 'dict'と 'int'のDjango TypeErrorオペランドタイプ

models.py: - 参照the docs

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は実際にはdictであり、dictに数値を追加しようとしています。

dictから値を取得してから追加する必要があります。

return last_order['order__max'] + 1 
1

aggregateは番号を返さない、それが形{"order__max": 3}で辞書を返します。あなたは、その辞書から番号を抽出する必要があります。

return last_order['order__max'] + 1 
関連する問題