Настройка =
У меня есть этот класс, расшифровка:
class Transcript(models.Model):
body = models.TextField('Body')
doPagination = models.BooleanField('Paginate')
numPages = models.PositiveIntegerField('Number of Pages')
и этот класс, TranscriptPages (models.Model):
class TranscriptPages(models.Model):
transcript = models.ForeignKey(Transcript)
order = models.PositiveIntegerField('Order')
content = models.TextField('Page Content', null=True, blank=True)
Поведение администратора, которое я пытаюсь создать, состоит в том, чтобы позволить пользователю заполнить Transcript.body всем содержимым длинного документа, и, если он установит Transcript.doPagination = True и сохранит администратора Transcript, я автоматически разделю тело в n страниц стенограммы.
В админке TranscriptPages является StackedInline администратора транскрипта.
Для этого я переопределяю метод сохранения Transcript:
def save(self):
if self.doPagination:
#do stuff
super(Transcript, self).save()
else:
super(Transcript, self).save()
Проблема =
Когда Transcript.doPagination имеет значение True, я хочу вручную удалить все TranscriptPages, которые ссылаются на этот Transcript, чтобы затем я мог создать их заново с нуля.
Итак, я думал, что это будет работать:
#do stuff
TranscriptPages.objects.filter(transcript__id=self.id).delete()
super(Transcript, self).save()
но когда я пытаюсь, я получаю эту ошибку:
Тип исключения: ValidationError
Значение исключения: [u'Выберите действительный
выбор. Этот выбор не является одним из
доступные варианты. ']
... и это последняя вещь в трассировке стека до возникновения исключения:
... / django / forms / models.py в save_existing_objects
- pk_value = form.fields [pk_name] .clean (raw_pk_value)
Другие попытки исправить:
- t =
self.transcriptpages_set.all (). Удалить ()
(где self = стенограмма из
метод save ())
- зацикливание на t (выше) и удаление каждого элемента в отдельности
- отправка сигнала post_save на TranscriptPages, который вызывает метод удаления
Есть идеи? Как админ это делает?
ОБНОВЛЕНИЕ: Время от времени, пока я играюсь с кодом, я могу получить различную ошибку (ниже), но затем она просто исчезает , и я не могу повторить ее снова. .. до следующего случайного времени.
Тип исключения:
MultiValueDictKeyError Exception
Значение: «Ключ» transcriptpages_set-0-id '
не найден в
Местоположение исключения:
... / django / utils / datastructures.py в
getitem , строка 203
и последние строки из трассы:
... / django / forms / models.py в _construct_form
- form = super (BaseInlineFormSet, self) ._ construct_form (i, ** kwargs)
... / django / utils / datastructures.py в getitem
- pk = self.data [pk_key]