Django: как добавить поля в форму в html и сохранить ее?
У меня есть форма с различными полями и одним полем TextInput с именем 'directions'. Пользователь может добавлять дополнительные поля направлений с помощью кнопки (просто клонируя существующее с помощью javascript). Но когда я пытаюсь сохранить его в базу данных, сохраняется только последнее. Если я выведу request.POST, то там будет список с именем 'directions': ['first direction', 'second', 'and so on...'], так что данные есть, но они почему-то усекаются после валидации. Я также попробовал заменить поле на пользовательское MultiValueField, начиная с одного CharField и добавляя дополнительные с помощью javascript, как это:
<input type="text" name="directions_0" required="" id="id_directions_0">
<input type="text" name="directions_1" required="" id="id_directions_1">
но результат тот же
models.py:
class Recipe(models.Model):
title = models.CharField(max_length=255)
directions = models.CharField(max_length=512)
class Ingredient(models.Model):
name = models.CharField(max_length=127)
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name='ingredients')
forms.py:
class RecipeForm(forms.ModelForm):
class Meta:
model = Recipe
fields = '__all__'
class IngredientForm(forms.ModelForm):
class Meta:
model = Ingredient
exclude = ('recipe', )
IngredientFormSet = forms.inlineformset_factory(Recipe, Ingredient, form=IngredientForm)
views.py:
class RecipeCreateView(CreateView):
form_class = RecipeForm
template_name = 'recipes/recipe_new.html'
success_url = reverse_lazy('recipe_list')
def get_context_data(self, **kwargs):
context = super(RecipeCreateView, self).get_context_data(**kwargs)
if self.request.POST:
context['formset'] = IngredientFormSet(self.request.POST)
else:
context['formset'] = IngredientFormSet()
return context
def form_valid(self, form):
context = self.get_context_data()
ingredient_formset = context['formset']
if ingredient_formset.is_valid():
self.object = form.save()
ingredient_formset.instance = self.object
ingredient_formset.save()
return super(RecipeCreateView, self).form_valid(form)
else:
return super(RecipeCreateView, self).form_invalid(form)
я хотел сохранить его как строку с разделителем, что-то вроде: "direction 1|direction 2|..." и затем отобразить его как список в DetailView.
или я должен создать другую модель для направлений и сделать наборы форм, как с ингредиентами? Но при этом должна быть возможность добавить другие поля в форму и сохранить ее?