2010-08-26 58 views
0

嘗試保存模型實例時發生KeyError。 它具有比上保存實例post_save信號作出反應......嘗試保存模型實例時發生KeyError。 Django

代碼:

from django.db.models.signals import post_save 

class PlaylistEntry(models.Model): 
    playlist=models.ForeignKey(Playlist) 
    media=models.ForeignKey(Media) 
    order=models.PositiveIntegerField(default=9000000, editable=False) 
    added=models.DateTimeField(default=datetime.datetime.now(),editable=False) 

def playlist_entry_changed(sender, instance, **kwargs): 
     entrys=PlaylistEntry.objects.filter(playlist=instance.playlist).order_by('order') 
     entrys[0].save() 

post_save.connect(playlist_entry_changed, PlaylistEntry) 

錯誤:

Exception Type: KeyError at /admin/playlist/playlistentry/add/ 
Exception Value: 38539456 
+0

你可以發佈完整的堆棧跟蹤嗎? – 2010-08-26 16:59:59

+0

你想用這個信號完成什麼?現在它似乎沒有做任何有用的事情。 – sdolan 2010-08-26 17:05:23

+0

我只是想在添加新條目時進行自動增量排序。當其中一個playlistentryes被刪除時結束重新安排訂單。 我看到問題了。它的無限星球 怎麼可以做到呢? – Pol 2010-08-26 17:08:19

回答

1

從你的意見,你現在要做的是更新排序。不要使用信號,請重寫保存方法。

def save(self, *args, **kwargs): 
    # Only do this if it's the first time we're saving. 
    if not self.id: 
     entries = PlaylistEntry.objects.order_by('-order') 
     try: 
      self.order = entries[0].order + 1 
     except IndexError: 
      # we don't have any PlaylistEntries yet, so we just start @ 0 
      self.order = 0 

    super(PlaylistEntry, self).save(*args, **kwargs) 

此外,爲什麼默認您的訂單爲900萬...不應該以0開頭嗎?

0

對於實施訂購,您也可以看看this snippet

+0

還有http://github.com/bfirsh/django-ordered-model – sdolan 2010-08-29 16:36:34

相關問題