0

私はPythonとDjangoの初心者で、サンプルプロジェクト「ブログ」を始めました。

現在、ブログの投稿は手動でデータベースに追加されていますが、ユーザーにフォームを提供することでフロントエンドで行いたいと考えています。model.pyおよびファイルを作成views.pyしましたが、フロント エンドにこれらのフィールドが表示されません。以下のコードをすべてコピーしました。

models.py :

class posts(models.Model): 
    author = models.CharField(max_length = 30) 
    title = models.CharField(max_length = 100) 
    bodytext = models.TextField() 
    timestamp = models.DateTimeField() 

class postForm(ModelForm): 
    class Meta: 
         model = posts

views.py :

def home(request):
    content = posts.objects.all()[:5]
    return render_to_response('index.html',{'posts' : content})

def save_blog(request):      
    form = postForm
    if request.POST:
        form = postForm(request.POST)
        if form.is_valid():
            form.save
    return render_to_response('index.html',{'form' : form},context_instance=RequestContext(request))

url.py :

from django.conf.urls import patterns, include, url    
from django.contrib import admin   
admin.autodiscover()

urlpatterns =
    patterns('',
        url(r'^$', 'blog.views.home', name='home'),
        url(r'^admin/', include(admin.site.urls))
    )

index.html :

<body>
    <div class="container">
        <h1>Welcome To</h1>
        <hr />
        {% for post in posts %} 
            <div class="posts">
                <h2>{{ post.title }}</h2>
                <h3>Posted on {{ post.timestamp }} by {{ post.author }}</h3>
                <p>{{ post.bodytext }}</p>
            </div>
            <hr />
        {% endfor %}
    </div>
    <div class="forms">
        <form action="." method="post" name="posts" id="posts">{% csrf_token %}
        <table>
        <tr><td>{{form.author.label}}</td><td>{{form.author}}</td></tr>
        <tr><td>{{form.title.label}}</td><td>{{form.title}}</td></tr>
        <tr><td>{{form.bodytext.label}}</td><td>{{form.bodytext}}</td></tr>
        <tr><td></td><td><input type="button" name="btnSave" id="bntSave" value="Submit"  class = "default2"/></td>
        </table>
        </form>
    </div>
</body>

settings.MIDDLEWARE_CLASSES :

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

何か不足している場合はお知らせください。また、Django モデル フォームを使用せずにこれを実現する方法を教えてください。

ありがとう

4

2 に答える 2

0

ビュー.py

def home(request):
     content = posts.objects.all()[:5]
     form = postForm() 
     if request.POST:
         form = postForm(request.POST) 
         if form.is_valid():
             form.save()
     return render_to_response('index.html',{'posts' : content, 'form' : form}, context_instance=RequestContext(request))

index.html

<div class="forms">
    <form method="post" name="posts" id="posts">
        {% csrf_token %}
        {{ form.as_table }}
        <input type="button" name="btnSave" id="bntSave" value="Submit" class="default2"/>    //<---------------
    </form>
</div>

アップデート:

送信しない理由がわかりました。入力タイプのbutton代わりに入れますsubmit

<input type="submit" name="btnSave" id="bntSave" value="Submit" class="default2"/> //<---------------

auto_now_addタイムスタンプ フィールドに追加するだけです

timestamp = models.DateTimeField(auto_now_add=True) 
于 2013-04-09T08:09:28.577 に答える
0

フォームを呼び出したようですpostFormが、ビューで使用posts_formしています...

また、フォームインスタンスを次のようform_saveに呼び出す必要があります。save()

if form.is_valid():
    form.save()

また、投稿後、ユーザーを別の URL にリダイレクトして、データの再送信を防ぐのが一般的です。

于 2013-04-09T07:46:07.673 に答える