Если вы используете метод сохранения прямо сейчас, Django попытается сохранить с помощью менеджера (что Django не позволяет). К сожалению, поведение, которое вам нужно, немного сложнее, чем то, что ModelForm
делает по умолчанию. Что вам нужно сделать, это создать formset .
Прежде всего, вам нужно изменить параметры вашего ClientForm
, чтобы он не отображал атрибут groupes
.
class ClientForm(ModelForm):
class Meta:
model = Client
exclude = ('groupes',)
Далее необходимо изменить вид для отображения набора форм:
from django.forms.models import inlineformset_factory
def modifier(request, id):
client = Client.objects.get(id=id)
form = ClientForm(instance = client)
# Create the formset class
GroupeFormset = inlineformset_factory(Client, Groupe)
# Create the formset
formset = GroupeFormset(instance = client)
dict = {
"form": form
, "formset" : formset
, "instance" : client
}
if request.method == "POST":
form = ClientForm(request.POST, instance = client)
formset = GroupeFormset(request.POST, instance = client)
if form.is_valid() and formset.is_valid():
client_mod = form.save()
formset.save()
id = client_mod.id
return HttpResponseRedirect(
"/client/%(id)s/?err=success" % {"id" : id}
)
else:
return HttpResponseRedirect(
"/client/%(id)s/?err=warning" % {"id" : id}
)
return render_to_response(
"client/modifier.html"
, dict
, context_instance=RequestContext(request)
)
И, очевидно, вы также должны настроить свой шаблон для визуализации набора форм.
Если вам нужны какие-либо другие советы по наборам форм, см. Следующие статьи:
Модель Formsets
FormSets