我真的被這個困住了。爲了顯示我的問題,我創建了一個新的Django項目,並從頭開始,只關注單一表單。如何創建和處理具有多個相同字段的表單?
我想要做的是創建一個窗體與幾個相同的名稱的字段。我嘗試使用modelformset_factory
來實現這一點,但它在我看來並不是我真正需要的。
以下是我的代碼(也在dpaste),它目前正在使用一個名爲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>
UPDATE:澄清,我想允許用戶一個表單中插入多個類別。我覺得我越來越近,這裏是我的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))
我不想向模型中添加其他字段。我想讓用戶在一個表單中插入多個'name'值。 – finspin
你想要一個表單添加許多類別? – YardenST
是的,這就是我想要做的。 – finspin