我在django中遇到了一些麻煩,我有兩個型號,Space
和Entity
。每個空間可以有N個與之相關的實體。django 1.3 - 保存多個表單不會保存部分
我用兩個ModelForms創建了一個表單,並且編寫了一個「明顯」工作的視圖。這是,它節省了空間形式,但不是實體形式的數據。對於我來說,保存這些表單並不會對它進行「部分」存儲,這對我來說沒有任何意義。
views.py
def all(items):
import operator
return reduce(operator.and_, [bool(item) for item in items])
def create_space(request):
"""
Create new space with its related entities. In this view the author
field is automatically filled.
"""
space_form = SpaceForm(request.POST or None, request.FILES or None)
entity_forms = [EntityForm(request.POST or None, prefix=str(x)) for x in range(0,3)]
if request.POST:
space_form_uncommited = space_form.save(commit=False)
space_form_uncommited.author = request.user
if space_form.is_valid() and all([ef.is_valid() for ef in
entity_forms]):
new_space = space_form_uncommited.save()
for ef in entity_forms:
ef_uncommited = ef.save(commit=False)
ef_uncommited.space = new_space
ef_uncommited.save()
# We add the created spaces to the user allowed spaces
space = get_object_or_404(Space, name=space_form_uncommited.name)
request.user.profile.spaces.add(space)
return redirect('/spaces/' + space.url)
return render_to_response('spaces/space_add.html',
{'form': space_form,
'entityform_0': entity_forms[0],
'entityform_1': entity_forms[1],
'entityform_2': entity_forms[2]},
context_instance=RequestContext(request))
forms.py
class SpaceForm(ModelForm):
"""
"""
class Meta:
model = Space
class EntityForm(ModelForm):
"""
"""
class Meta:
model = Entity
模板代碼粘貼here因爲太長。
EntityForm應該是一個ModelFormset,不是的ModelForm。請參閱https://docs.djangoproject.com/en/dev/topics/forms/formsets/ – 2011-05-27 07:53:51
使用formset後,實體正在保存,但他們沒有得到相關的空間。 – 2011-05-27 09:39:05