Django: сохранение() запрещено для предотвращения потери данных из-за несохранения связанного объекта 'predictions'
Я создаю проект Django, в котором я использую inline_formset для добавления нескольких форм с фронтенда (так же как и с бэкенда). Я пытаюсь создать новый объект из фронтенда, основные модели сохраняются, но модель, которая является внешним ключом к основной модели, не сохраняется (Inline Model).
Я получаю сообщение об ошибке: save() prohibited to prevent data loss due to unsaved related object 'predictions'
. Вот мой CreateView
код.
views.py
class ProductInline():
form_class = PredictionForm
model = Predictions
template_name = "core/create/create_bet.html"
def form_valid(self, form):
named_formsets = self.get_named_formsets()
if not all((x.is_valid() for x in named_formsets.values())):
return self.render_to_response(self.get_context_data(form=form))
# self.object = form.save()
new_form = form.save(commit=False)
new_form.user = self.request.user
new_form.save()
# for every formset, attempt to find a specific formset save function
# otherwise, just save.
for name, formset in named_formsets.items():
formset_save_func = getattr(self, 'formset_{0}_valid'.format(name), None)
if formset_save_func is not None:
formset_save_func(formset)
else:
formset.save()
return redirect('core:dashboard')
def formset_variants_valid(self, formset):
"""
Hook for custom formset saving.. useful if you have multiple formsets
"""
variants = formset.save(commit=False) # self.save_formset(formset, contact)
# add this, if you have can_delete=True parameter set in inlineformset_factory func
for obj in formset.deleted_objects:
obj.delete()
for variant in variants:
variant.product = self.object
variant.save()
def formset_images_valid(self, formset):
"""
Hook for custom formset saving.. useful if you have multiple formsets
"""
images = formset.save(commit=False) # self.save_formset(formset, contact)
# add this, if you have can_delete=True parameter set in inlineformset_factory func
for obj in formset.deleted_objects:
obj.delete()
for image in images:
image.product = self.object
image.save()
class PredictionCreate(ProductInline, CreateView):
def get_context_data(self, **kwargs):
ctx = super(PredictionCreate, self).get_context_data(**kwargs)
ctx['named_formsets'] = self.get_named_formsets()
return ctx
def get_named_formsets(self):
if self.request.method == "GET":
return {
'variants': PredictionDataFormSet(prefix='variants'),
}
else:
return {
'variants': PredictionDataFormSet(self.request.POST or None, self.request.FILES or None, prefix='variants')
}