2017-05-07 4 views
2

Djangoフォームを学ぶためにModアプリケーションを収集するDjangoサイトを構築しようとしています。私はばかだと私は何をしているのか分からない。 私がしようとしていることは、現在の部分のフォームデータを収集して保存し、後でそのデータをDjango Adminに表示しようとします。私はまだやっていない部分を示しています。Djangoフォーム:投稿要求はありますがデータは保存されません

私はフォームに必要事項を記入すると、私はこれが私のforms.pyある[06/May/2017 19:38:29] "POST /modapp HTTP/1.1" 200 2354

取得:

class Application(forms.ModelForm): 



class Meta: 
    model = ModApplication 
    fields = ('discord', 'reddit', 'serverrank','finds','serverstay','active','timezone','reason','helped','help') 


def __init__(self, *args, **kwargs): 
    super(Application, self).__init__(*args, **kwargs) 
    self.fields['discord'].widget.attrs['placeholder'] = 'UnknownDeveloper#2068' 
    self.fields['reddit'].widget.attrs['placeholder'] = '/u/UnknownDeveloper' 
    self.fields['serverrank'].widget.attrs['placeholder'] = 'GEOCACHING + RANK' 
    self.fields['serverstay'].label = "How long have you been on the server" 
    self.fields['active'].label = "How active have you been on the server" 
    self.fields['timezone'].widget.attrs['placeholder'] = 'CET' 
    self.fields['reason'].label = "Why do you want to become a mod?" 
    self.fields['helped'].label = "How have you helped the server so far?" 
    self.fields['help'].label = "How will you help the server if you'll become a mod" 

models.py

class ModApplication(models.Model): 
def __unicode__(self): 
    return "Discord User: " + self.discord + " aka " + self.reddit 

reddit = models.CharField("Reddit Username", max_length=30) 
discord = models.CharField("Discord Username", max_length=30) 
serverrank = models.CharField("Server Rank", max_length=60) 
finds = models.CharField("Finds", max_length=12) 
serverstay = models.CharField("Stayed on the server for",max_length=200) 
active = models.CharField("Is Actice on Discord for", max_length=500) 
timezone = models.CharField("Timezone", max_length=20) 
reason = models.TextField("He likes to become a mod because", max_length=5000) 
helped = models.TextField("He helped by", max_length=5000) 
help = models.TextField("He'll help by", max_length=5000) 

views.py

def formtofill(request): 
form = Application() 
return render(request, 'appmod.html', {'form': form,}) 
if request.method == "POST": 
    form = Application(request.POST) 
    print(request.POST) 
    if form.is_valid(): 
     user = form.save() 
     user.discord = request.discord 
     user.reddit = request.reddit 
     user.serverrank = request.serverrank 
     user.finds = request.finds 
     user.serverstay = request.serverstay 
     user.active = request.active 
     user.timezone = request.timezone 
     user.reason = request.reason 
     user.helped = request.helped 
     user.help = request.help 
     user.save() 
     print(user) 
     messages.success(request, 'Your Mod Application has been successfully submitted!') 
     print(form) 
     return HttpResponse('Successful') 
else: 
    form_class = Application 

私は私は何も見つかりませんでした。私はデバッグメッセージを印刷しようとしましたが、何も印刷しませんでした。私はメッセージモジュールを置いたが、何も起こらなかった。 HTTPResponseはフォームにリロードされます。ヘルプは喜んで受け入れられるでしょう。御時間ありがとうございます。私は何かが欠けていた場合、それはこれらの属性のエラーを生成する必要があり、それは、このコードはすべてで実行されることを驚きだ私に言うと、私は私のポスト

答えて

2

を編集しますしてください:

user.discord = request.discord 
    user.reddit = request.reddit 

しかし、その理由を実行パスが決してそのポイントに到達しないためです。

def formtofill(request): 
    form = Application() 
    return render(request, 'appmod.html', {'form': form,}) 

そのリターンステートメントのためです。

あなたの修正コードが

def formtofill(request): 

    form = Application() 

    if request.method == "POST": 
     form = Application(request.POST) 
     print(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      messages.success(request, 'Your Mod Application has been successfully submitted!') 
      return HttpResponseRedirect('/success_url') 
    else: 
     form_class = Application 
    return render(request, 'appmod.html', {'form': form,}) 
+0

はい。できます!! Django – MatejMecka

1

いけないフォームの先行投資を保存するようになっているはずです。保存しますが、commit = falseを入れます。 上記の返信文も削除してください。

user = form.save(commit=False). 

インスタンスは作成されますが、データベースには書き込まれません。これで割り当てを行うことができます。

user = form.save(commit=False). 
    #Now.... 
    user.discord = request.POST['discord'] 
    user.reddit = request.POST['reddit'] 
    user.serverrank = request.POST['serverrank'] 
    user.finds = request.POST['finds'] 
    user.serverstay = request.POST['serverstay'] 
    .................... 
    user.save() 
    return HttpResponse('Successful') 

代わりに、リクエストオブジェクト自体の属性としてデータにアクセスしようとしていました。フォームデータはrequest.POSTに格納されています。そこからフォームデータにアクセスする必要があります。

また、

else: 
    form = Application() 

あなたはフォームクラスをインスタンス化する必要があります。

+2

の馬鹿です。申し訳ありませんが、request.POSTからデータを取得するのは間違いです。 form.cleaned_dataからデータを取得する必要があります – e4c5

+0

ええ、そうです。私はそれが正しい方法だと言っていませんでしたが、私はそれもやり遂げることができると言っていました。頭がおかげでありがとう。私は今からそれを心に留めておきます。 – zaidfazil

関連する問題