Итак, я использую Django Мастер форм, чтобы разделить упрощенную PostForm. На одном из шагов посетители могут загружать различные изображения, связанные с публикацией.
В методе done для SessionWizardView я сначала сохраняю экземпляр, а затем проверяю изображения в наборе форм.
Однако я получаю следующее сообщение об ошибке:
save () запрещено предотвращать потерю данных из-за несохраненного связанного объекта
Я попытался установить соответствующий идентификатор сообщения для набор форм, но я что-то здесь упускаю, форм-наборы - это все еще то, за чем я не могу следовать .. Любая помощь приветствуется!
models.py
class Post(models.Model)
title = models.CharField(max_length=200)
description = models.TextField(max_length=1000)
def __str__(self):
return self.title
class Image(models.Model):
post = models.ForeignKey('Post', on_delete=models.SET_NULL, null=True)
file = models.ImageField(upload_to='images/', null=True, blank=True)
alt = models.CharField(max_length=200, blank=True)
views.py
FORMS = [
('title', PostCreateForm),
('image', ImageFormset)
]
TEMPLATES = {
'title': 'post_form_title.html',
'image': 'post_form_image.html'
}
class PostWizardView(SessionWizardView):
form_list = FORMS
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'temp/'))
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def done(self, form_list, form_dict, **kwargs):
instance = Post()
for form in form_list:
instance = construct_instance(form, instance)
instance.save()
post_id = instance.pk
if 'image' in form_dict:
formset = form_dict['image']
if formset.is_valid():
formset.save(commit=False)
for form in formset:
form.post = post_id
formset.save()
forms.py
class PostCreateForm(forms.ModelForm):
class Meta:
model = Image
fields = '__all__'
ImageFormset = inlineformset_factory(
Post,
Image,
form = PostCreateForm,
min_num=1,
can_delete=True
)