2010-08-26 3 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

Можете ли вы опубликовать полную трассировку стека? –

+0

Что вы пытаетесь выполнить с помощью этого сигнала? Сейчас он, похоже, ничего полезного не делает. – sdolan

+0

Я просто хочу сделать заказ автоинкремента при добавлении новой записи. Конец пересчета, когда один из плейлистов удаляется. Я вижу проблему. Его бесконечная цифра Как это сделать? – Pol

ответ

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) 

Кроме того, почему ваш заказ по умолчанию не равен 9 миллионам ... не стоит ли начинать с 0?

0

Для выполнения заказа вы также можете взглянуть на this snippet!

+0

Существует также http://github.com/bfirsh/django-ordered-model – sdolan

Смежные вопросы