2012-02-08 8 views
0

以下のコードを作成して、ユーザーがDjangoでステータスを更新できるようにします。そしてそれらの更新は同じテンプレートに表示されるはずです。しかし、それは動作していません。たとえば、ステータステキストエリアに「ハッカーになることは日の仕事ではありません」と入力し、フォームの下にある更新ボタンをクリックします。友人が見るために同じテンプレートに更新が表示されます。ちょうど私たちがfbの状態更新を投稿する方法と同じです。更新作業をしようとしています

モデル

class mob (models.Model): 
    username=models.ForeignKey(User, unique=True) 
    state_province=models.CharField(max_length=50) 
    body=models.TextField(max_length=10000) 
    date=models.DateTimeField() 

    def __unicode__(self): 
     return u"%s - %s - %s - %s" % (self.username, self.state_province, self.body, self.date) 

    def get_absolute_url(self): 
     return "/post/%s/" % unicode(self.id) 
    def get_author_url(self): 
     return "/u/%s/p/0" % (self.username) 

フォーム

class mobForm(ModelForm): 
    class Meta: 
     model=mob 
     fields=('body','username','state_province','date') 
     widgets={ 
      'body':Textarea(attrs={"rows":2, "cols":40}), 
      'username': (HiddenInput), 
      'state_province': (HiddenInput), 
      'date':(HiddenInput), 
     } 

ビュー

def homey(request): 
    #if there’s nothing in the field do nothing. 
    if request. method != "": 
     return HttpResponseRedirect('/homi/') 

    newmob=mob() 
    newmob.username=request.user 
    newmob.date=datetime.datetime.now() 
    newmob.body=request.POST['body'] 
    if request.POST['body'] <> '': 
     newmob.body=body.objects.get(id=request.POST['body']) 
     newmob.save() 
     return HttpResponseRedirect('/homi/') 
    else: 
     return render_to_response('meek_home.html', {'mobForm': mobForm },context_instance=RequestContext(request)) 

テンプレート

{% extends "base_meek.html" %} 

{% block body %} 
<div class="form"> 
    <form action="." method="post" enctype="multipart/form-data"> 
    <table> 
    {{ mobForm }} 
    </table> 
     <input type="submit" value="Update" /> 
    </form> 
{% endblock %} 
+0

この例は完全ですか?どのテンプレートが結果の状態更新を表示しているはずですか? '/ homi /'と 'meek_home.html'とは何ですか?また、ステータスの更新を表示するものは何ですか? – jdi

+0

/homi /はまだmeek_home.htmlと同じページです。 (r '^ homi/$'、homey)、HttpResponseRedirectionのためにちょうど使用/ homi /。私はあなたが私のポイントを得ることを望む。 – skizzy

答えて

0

ビューを扱う方法が奇妙です。最初に、どのような状況でリクエストメソッドが空白であるかわからないIm。次に、リクエストを同じビューにリダイレクトする必要はありません。第3に、POST本体が<で設定されていないかどうかをチェックする奇妙な方法を実行すると、フォームデータセットなしで同じビューにリダイレクトされます。

ビューロジックは、要約で、このようなものでなければなりません:リクエストがPOSTである場合は、フォームにデータをロード

  1. 。データを検証します。その場合は、テンプレートをフォームに戻して、テンプレート上のデータでデータを取り込みます。さもなければ何らかのエラーをレンダリングします。
  2. それ以外の場合は、新しいテンプレートにデフォルトのフォームでテンプレートをレンダリングします。

フォームの全体的な問題とは別に、私が提案している主な調整は、フォームが設​​定されている場合の対処方法です。リダイレクトを削除します。代わりに保存したばかりのモデルにフォームセットを戻してみてください。

if request.POST['body']: 
    newmob.body=body.objects.get(id=request.POST['body']) 
    newmob.save() 
    theForm = mobForm(instance=newmob) 
    return render_to_response('meek_home.html', {'mobForm': theForm },context_instance=RequestContext(request)) 

また、POST ['body']の値がわかりません。オブジェクトの実際のIDを渡すことを期待していますか?私はそれがある種のメッセージだと思った?あなたがそれを行う前に、コメント

becauseyou下のコメント内のコードを使用して、おそらく取得エラーあたり

アップデートは全く何のためにチェックされていません。

def home(request): 

    newmob=mob() 

    if request.method == "POST": 
     newmob.username=request.user 
     newmob.date=datetime.datetime.now() 

     body = request.POST.get('body') 
     if body: 
      newmob.body=body 
      newmob.save() 

    theForm=mobForm(instance=newmob) 
    return render_to_response('home.html', {'mobForm':theForm}, context_instance=RequestConte‌​xt(request)) 
+0

返事をありがとう。私が望むのは、ユーザーが自分のステータスを更新するときに、ユーザー名、ステータスの更新、日付と状態が同じテンプレートに表示されるはずです。彼の友人や追随者がそれを見て、コメントしたり、共有したりできるようになります。私のポイントを得ることを望みますか? – skizzy

+0

以下のコードを入力した後、MultiValueDictKeyErrorが/ homei/"キーボディがに見つかりません" – skizzy

+0

def home(request): newmob = mob() newmob.username = request.user newmob.date = datetime.datetime.now() newmob.body = request.POST ['body'] の場合request.POST ['body']: newmob.body = body.objects.get( ( 'home.html'、{'mobForm':theForm}、context_instance = RequestContext(リクエスト)を返します。 ) – skizzy

関連する問題