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 に答える