Формы для нескольких вложенных связанных моделей в Django
Я разрабатываю сайт для школьников на добровольной основе, есть несколько вложенных моделей, а именно: У меня есть Вопрос, связанный с ним 1to1 Комментарий, и ForeignKey CoImage, связанный с Комментарием (мне нужна возможность добавлять много иллюстраций в Комментарий). Чтобы редактировать весь Вопрос на одной странице, я использую inlineformset_factory.
ПРОБЛЕМА: при загрузке файлов почему-то все изображения добавляются в QuImage (это иллюстрации к вопросу, которые обрабатываются в той же форме), даже те, которые были загружены в CoImage.
Мои формы:
from .models import Question, QuImage, Comment, CoImage, CoFile
from django.forms import ModelForm, inlineformset_factory
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = [
'year', 'stage', 'grade', 'part', 'number',
'text', 'tags', 'topics',
'flag', 'type']
QuImageFormSet = inlineformset_factory(Question, QuImage, extra = 5, fields=['file', 'label'])
CommentFormSet = inlineformset_factory(Question, Comment, extra = 1, fields=['text'])
CoImageFormSet = inlineformset_factory(Comment, CoImage, extra = 3, fields=['file', 'label'])
Мои взгляды:
def add(request):
if request.method == 'POST':
addform = QuestionForm(request.POST)
question = quicksave(addform)
if question:
quimageform = QuImageFormSet(request.POST, request.FILES, instance=question)
quicksave(quimageform)
commentform = CommentFormSet(request.POST, instance=question)
comment = quicksave(commentform)
if comment:
coimageform = CoImageFormSet(request.POST, request.FILES, instance=comment)
quicksave(coimageform)
return redirect('problems')
addform = QuestionForm()
quimage = QuImageFormSet()
comment = CommentFormSet()
coimage = CoImageFormSet()
cofile = []
context = {'addform': addform,
'quimage': quimage,
'comment': comment,
'coimage': coimage,
'cofile': cofile}
return render(request, 'add.html', context)
Буду очень благодарен за помощь в решении этой проблемы, вы поможете крутому проекту! Есть ли хороший простой способ работы с множеством иерархически связанных моделей в django? Весь код доступен на github. Примечание: quicksave - это мой простой скрипт, который делает form.is_valid и сохраняет его.