2016-05-09 14 views
0

Ich habe ein Through-Modell erstellt, also kann ich dem m2m-Feld ein Bestellfeld hinzufügen, aber ich habe Probleme, das Bestellfeld per Def-Nummer zu erhöhen() unten. Wenn ich ein Objekt hinzufüge, bekomme ich TypeError nicht unterstützten Operandentyp (en) für +: 'dict' und 'int' und ich bin mir nicht sicher warum. Irgendwelche Ideen?Django TypeError nicht unterstützte Operandentypen für +: 'dict' und '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'] 

Antwort

1

Wie in der Dokumentation erwähnt, aggregate() gibt ein dict Objekt. Daher ist die Variable last_order eigentlich ein Diktat und Sie versuchen, eine Nummer zu einem Diktat hinzuzufügen.

Sie sollten den Wert aus dem Diktat erhalten und dann hinzufügen.

return last_order['order__max'] + 1 
1

aggregate keine Nummer zurück, es gibt ein Wörterbuch in Form {"order__max": 3} - the docs sehen. Sie müssen die Anzahl von diesem dict extrahieren:

return last_order['order__max'] + 1