У меня есть 2 модели:
class Series(models.Model):
puzzles = models.ManyToManyField(Puzzle, through='SeriesElement', related_name='series')
class SeriesElement(models.Model):
puzzle = models.ForeignKey(Puzzle,
on_delete=models.CASCADE,
verbose_name='Puzzle',
)
series = models.ForeignKey(Series,
on_delete=models.CASCADE,
verbose_name='Series',
)
puzzle_index = models.PositiveIntegerField(verbose_name='Order',
default=0,
editable=True,
)
class Meta:
unique_together = ['puzzle', 'series', 'puzzle_index']
ordering=['puzzle_index']
, и на странице администрирования Series отображается встроенный элемент SeriesElement.
class SeriesAdmin(admin.ModelAdmin):
save_as = True
inlines = (SeriesElementInline,)
Когда я нажимаю «сохранить как новый», происходит ошибка
, проходя через net, я понял, что мне нужно переопределить save_formset, и следующий подход, похоже, почти работает:
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
pdb.set_trace() # for debug
for i in instances:
if hasattr(i, 'puzzle_id') and not i.puzzle_id:
i.puzzle_id = request.puzzle_id # not working
i.puzzle_index= request.puzzle_index # not working
i.save()
formset.save_m2m()
super(SeriesAdmin, self).save_formset(request, form, formset, change)
Однако я не могу понять как я могу восстановить исходные puzzle_id и puzzle_index , чтобы иметь возможность воссоздать SeriesElements, которые ссылаются на новые серии в коде, что я должен поместить вместо запроса .puzzle_id и request.puzzle_index для извлечения исходных значений?
PS: вот содержимое request.POST, где все элементы кажутся доступными, но я не знать, как правильно их получить:
<QueryDict: {'csrfmiddlewaretoken': ['M0WzCXJ....3Zg'], '_saveasnew': ['Enregistrer en tant que nouveau'], 'fullname': ['s__1x4x4__2D__0-0-2-1-0__112_essai'], 'display_name': ['essai'], 'pzl_sequence_opt_ratio_pieces': ['2.0'], 'pzl_sequence_opt_ratio_difficulty': ['1.5'], 'comment': ['merged from series 121,112,118,122'], 'serieselement_set-TOTAL_FORMS': ['10'], 'serieselement_set-INITIAL_FORMS': ['10'], 'serieselement_set-MIN_NUM_FORMS': ['0'], 'serieselement_set-MAX_NUM_FORMS': ['1000'], 'serieselement_set-0-id': ['1111'], 'serieselement_set-0-series': ['37'], 'serieselement_set-0-puzzle_index': ['1'], 'serieselement_set-1-id': ['1112'], 'serieselement_set-1-series': ['37'], 'serieselement_set-1-puzzle_index': ['2'], 'serieselement_set-2-id': ['1113'], 'serieselement_set-2-series': ['37'], 'serieselement_set-2-puzzle_index': ['3'], 'serieselement_set-3-id': ['1116'], 'serieselement_set-3-series': ['37'], 'serieselement_set-3-puzzle_index': ['4'], 'serieselement_set-4-id': ['1114'], 'serieselement_set-4-series': ['37'], 'serieselement_set-4-puzzle_index': ['5'], 'serieselement_set-5-id': ['1117'], 'serieselement_set-5-series': ['37'], 'serieselement_set-5-puzzle_index': ['6'], 'serieselement_set-6-id': ['1118'], 'serieselement_set-6-series': ['37'], 'serieselement_set-6-puzzle_index': ['7'], 'serieselement_set-7-id': ['1119'], 'serieselement_set-7-series': ['37'], 'serieselement_set-7-puzzle_index': ['8'], 'serieselement_set-8-id': ['1115'], 'serieselement_set-8-series': ['37'], 'serieselement_set-8-puzzle_index': ['9'], 'serieselement_set-9-id': ['1120'], 'serieselement_set-9-series': ['37'], 'serieselement_set-9-puzzle_index': ['10'], 'serieselement_set-__prefix__-id': [''], 'serieselement_set-__prefix__-series': ['37'], 'serieselement_set-__prefix__-puzzle_index': ['0']}>