
Однако я не могу получить доступ ни к каким данным — похоже, форма не сохраняет данные?
Здесь, в view.py, вы можете увидеть, где следует сохранять:
Код: Выделить всё
class RecipeInline():
form_class = RecipeForm
model = Recipe
template_name = "recipes/recipe_form.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()
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('recipes-home')
def formset_variantingredients_valid(self, formset):
variantingredients = formset.save(commit=False)
for variantingredient in variantingredients:
variantingredient.recipe = self.object
variantingredient.save()
def formset_images_valid(self, formset):
images = formset.save(commit=False)
for image in images:
image.recipe = self.object
image.save()
Код: Выделить всё
class Image(models.Model):
recipe = models.ForeignKey(
Recipe, on_delete=models.CASCADE, null=True
)
image = models.ImageField(blank=True, upload_to='images')
def __str__(self):
return self.recipe.title
class VariantIngredient(models.Model):
recipe = models.ForeignKey(
Recipe, on_delete=models.CASCADE
)
ingredient = models.CharField(max_length=100)
quantity = models.PositiveIntegerField(default=1)
unit = models.CharField(max_length=10, choices=unit_choice, default='g')
def __str__(self):
return self.recipe.title
Код: Выделить всё
class RecipeForm(forms.ModelForm):
class Meta:
model = Recipe
fields = ['title','description','temperature','serving','prep_time', 'cook_time']
def __init__(self, *args, **kwargs):
super(RecipeForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = True
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-md-3 create-label'
self.helper.field_class = 'col-md-9'
self.helper.layout = Layout(
Div(
Field('title'),
Field('description'),
Field('temperature'),
Field('serving'),
Field('prep_time'),
Field('cook_time'),
)
)
class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = '__all__'
class VariantIngredientForm(forms.ModelForm):
class Meta:
model = VariantIngredient
fields = '__all__'
widgets = {
'ingredient': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'quantity': forms.NumberInput(
attrs={
'class': 'form-control'
}
),
'unit': forms.TextInput(
attrs={
'class': 'form-control'
}
),
}
VariantIngredientFormSet = inlineformset_factory(
Recipe, VariantIngredient, form=VariantIngredientForm, #Product and Variant are models
extra=1, can_delete=True
)
ImageFormSet = inlineformset_factory(
Recipe, Image, form=ImageForm, #Product and Image are models
extra=1, can_delete=True
)
Есть у меня проблема с сохранением самой формы или я просто не правильно получаю доступ к данным?
Подробнее здесь: https://stackoverflow.com/questions/787 ... not-saving