3

だから私は次のモデルを持っています:

class Recipe(models.Model):
        title = models.CharField(max_length=100)
        ingredients = models.TextField(max_length=200,help_text="Put the ingredients required for the recepies here !")
        instructions = models.TextField(max_length=500)

        posted_on = models.DateTimeField('Posted On')

        def __unicode__(self):
                return self.title

今私がやりたいことは、次のようなフォームを持つ add.html と呼ばれる html にフロントエンドがあることです:

<!DOCTYPE html>


<head><title>New Recipe</title></head>
<body>
<h1>Add A new Recipe Here</h1>

<form action="/recipes/add/" method="post">
{% csrf_token  %}

<label>ID<label>
<input type="number" name="id"></input><br />

<label>Title </label>
<input type ="text" name="title"><br />

<label>Ingredients</label>
<input type="text" name="ingredients" />
<br />

<label>Instructions </label>
<input type="text" name="instructions" />
...

を使用してフォームを保存する方法は次のModelFormとおりです。

def add(request):
        if request.method == 'POST':
                form = RecipeForm(request.POST)
                if form.is_valid():

                        form.save()
                        #redirect
                        return HttpResponse("Thank you")
                else:
                        return HttpResponse("Form Not Valid")
        else:
                form = RecipeForm()

                context = Context({'form':form,})
                context.update(csrf(request))
                template = loader.get_template('myApp/add.html')
                return HttpResponse(template.render(context))

私がこれを実行すると、私はいつも得る"form Invalid" ので、今私の問題は、HTMLフォーム add.html が私のモデル Recipe として正確なマッピングを持っている必要がありますか?
はいの場合、

  1. types対応するものを html フォーム (for )に追加するにはどうすればよいposted_onですか?
  2. idによって暗黙的に作成された をどのように処理しsyncdbますか?
  3. 代替手段はありますか?

Djangoを学び始めたばかりです

4

2 に答える 2

4

1)posted_on投稿日を自動で追加するように変更。

posted_on = models.DateTimeField(auto_now_add=True)

2) Django が pk id の作成を処理します。

3) これに a を使用しないのはなぜModelFormですか? ドキュメンテーション

class RecipeForm(ModelForm):
    class Meta:
        model = Recipe

excludeまたはincludeonを使用して、フォームに含めたいfieldsフィールドのみがフォームに含まれるようにすることができます。Recipe

于 2013-02-02T17:50:15.557 に答える
2

models.py

class Recipe(models.Model):
    title = models.CharField(max_length=100)
    ingredients = models.TextField(max_length=200,help_text="Put the ingredients required for the recepies here !")
    instructions = models.TextField(max_length=500)

    posted_on = models.DateTimeField(auto_add_now=True)

    def __unicode__(self):
            return self.title

page.html

<!DOCTYPE html>

<head><title>New Recipe</title></head>
<body>
<h1>Add A new Recipe Here</h1>

<form action="/recipes/add/" method="post">
{% csrf_token  %}
     {% form.as_p %}
     <input type="submit" value="submit">
</form>
</body>
</html>

views.py

from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render

def add(request):
    if request.method == 'POST':
            form = RecipeForm(request.POST)
            if form.is_valid():
                form.save()
                    return HttpResponseRedirect(reverse('app_name:url'))
            else:
                messages.error(request, "Error")
    return render(request, 'myApp/add.html', {'form': RecipeForm()})
于 2013-02-01T18:56:21.457 に答える