私は本当にこれで立ち往生しています。私の問題を示すために、私は新しいDjangoプロジェクトを作成し、1つのフォームのみに焦点を当ててゼロから始めました。
私がやろうとしているのは、同じ名前の複数のフィールドを持つフォームを作成することです。私はmodelformset_factory
これを達成するために使用しようとしましたが、それは私が本当に必要としているものではないように見えます。
以下は私のコードです(これもdpasteにあります)。これは現在、と呼ばれる1つのフィールドで正常に機能しますname
。name
複数のフィールドを持つフォームを作成して処理するにはどうすればよいですか?誰かが私を正しい方向に向けることができますか?
# models.py
class Category(models.Model):
name = models.CharField(max_length=30, unique=True)
user = models.ForeignKey(User, blank=True, null=True)
class Meta:
verbose_name_plural = "Ingredience Categories"
def __unicode__(self):
return self.name
# forms.py
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = ('name',)
# views.py
def home(request):
if request.method == 'POST':
catform = CategoryForm(request.POST)
catformInstance = catform.save(commit = False)
catformInstance.save()
return HttpResponseRedirect('')
else:
catform = CategoryForm()
context = {'catform': catform}
return render_to_response('home.html', context, context_instance=RequestContext(request))
# home.html template
<h3>Insert new Category</h3>
<form action="/" method="post" id="ingr-cat-form">{% csrf_token %}
{{ catform.as_p }}
<input type="submit" name="ingrCatForm" value="Save" />
</form>
更新:明確にするために、ユーザーが1つのフォーム内に複数のカテゴリを挿入できるようにします。私は近づいていると思います。これが私の新しいバージョンのviews.pyですが、それでも1つのカテゴリ(リストの最後のカテゴリ)のみが格納されます。
def home(request):
if request.method == 'POST':
catform = CategoryForm(request.POST)
names = request.POST.getlist('name')
catformInstance = catform.save(commit = False)
for name in names:
catformInstance.name = name
catformInstance.save()
return HttpResponseRedirect('')
else:
catform = CategoryForm()
context = {'catform': catform}
return render_to_response('home.html', context, context_instance=RequestContext(request))