保存模型实例时出现KeyError。Django
在尝试保存模型实例时出现了KeyError错误。这意味着在保存实例时,它需要对post_save信号做出反应...
代码:
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
2 个回答
0
如果你想实现排序功能,可以看看这个代码片段!
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)
另外,为什么你的默认排序是9000000呢……难道不应该从0开始吗?