0

我不知道如何在数据库中存储一个简单的表单。我想我已经很接近了,但是我的views.py中可能有问题。这是我的代码,有什么想法我做错了吗?(也在dpaste上)

# models.py
class IngredienceCategory(models.Model):
    name = models.CharField(max_length=30, unique=True)
    user = models.ForeignKey(User, null=True, blank=True)

    class Meta:
    verbose_name_plural = "Ingredience Categories"

    def __unicode__(self):
        return self.name

# forms.py
class CategoryForm(forms.Form):
    name = forms.CharField(max_length=30)

# views.py
@login_required
def newCategory(request):
    if request.method == 'POST':
        username = request.user.username
        cform = CategoryForm(request.POST)
        if cform.is_valid():
            formInstance = cform.save(commit = False)
            formInstance.user = username
            formInstance.name = cform.cleaned_data['name']
            formInstance =  IngredienceCategory.objects.filter(name=formInstance.name, user=formInstance.user)
            formInstance.save()
            # return HttpResponseRedirect('new-category/')
    else:
        form = CategoryForm()

    context = {'form': form}

    return render_to_response('new-category.html', context, context_instance=RequestContext(request))

# new-category.html
<h3>Insert New Category</h3>
<form action="/" method="post" id="food-form">{% csrf_token %} 
{{ form.as_p }}
<input type="submit" name="foodForm" value="Save" />
</form>
4

2 回答 2

2

下面的行在当前位置没有用。在您保存表单数据之前,该命令将执行数据库查询并将结果分配为查询集。

formInstance =  IngredienceCategory.objects.filter(name=formInstance.name, user=formInstance.user)

这应该有效:

使用 cform 作为正常形式:

if cform.is_valid():
    formInstance = IngredienceCategory(user=request.user, cform.cleaned_data['name'])
    formInstance.save()

如果 cform 是 ModelForm 你可以这样做:

if cform.is_valid():
    formInstance = cform.save(commit=False)
    formInstance.user = request.user
    formInstance.save()

我建议您查看ModelForms,因为它会根据您的模型构建清洁功能。

于 2012-11-24T20:44:08.247 回答
0

您应该从 ModelForm 继承

from django.forms import ModelForm class CategoryForm(ModelForm): class Meta: model = IngredienceCategory

有关如何呈现表单并将其保存到数据库的信息,请参阅https://docs.djangoproject.com/en/dev/topics/forms/modelforms/ 。

于 2012-11-24T20:20:20.090 回答