2016-06-15 3 views
-2

私は、ドキュメントを追跡しようとしているが、私はエラーを取得しておいてください。このcharFieldからstrを取得するにはどうすればよいですか?

'issues has no attribute content"

私の目標は、私は私の実際のデータベースにそれをコミットするまで、私はデータを保持するために一時変数を必要とすることです。

コードを読むとき、内容は基本的にtmpです。logCommentsは実際にデータベースにコミットしたいときです。誰が何をいつ編集したのかを追跡する履歴を作成しようとしています。しかし、私がinstance.logComments = formIssues.__str__()を呼び出すたびに、私は文字列メソッドに定義されているにもかかわらず、そのエラーを取得し続けます。誰かが間違っているところを指摘できますか?

class issues(ModelForm): 
    content = forms.CharField(widget=forms.Textarea,max_length=500, label='') 

forms.py

def __str__(self): 
    return str(self.content) 

class Meta: 
    model = History 
    fields = ['content'] 
    widgets = {'content': Textarea(attrs={'cols': 50, 'rows': 30})} 
    labels = {'content': ""} 

views.py

formIssues = issues(request.POST or None) 

    #This is for saving the issues textbox 
if request.method == 'POST' and formIssues.is_valid() and 'Submit Issue' in request.POST: 
    #History.logComments = formIssues 
    instance = formIssues.save(commit=False) 
    instance.logComments = formIssues.__str__() 
    instance.projectID = 1337 
    instance.userID = request.user 
    instance.commentType = "Issue" 
    instance.save() 

models.py

class History(models.Model): 

    projectID = models.IntegerField() 
    userID = models.CharField(max_length=10) 
    logComments = models.TextField(max_length=500, default='') 
    commentType = models.CharField(max_length=20, default ='') 
    timeStamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
+0

いつものように、きれいなデータからそれを得るのはなぜですか? – Sayse

+0

私はdjangoを初めて使っています。詳細を教えてください。私はきれいにされたデータのコンセプトを聞いたことがあるが、私はそれを本当に理解していない。 – Sean

+0

それは[docs](https://docs.djangoproject.com/en/1.9/topics/forms/)で広くカバーされています。 – Sayse

答えて

1

あり誤解の数はここにいる、それがどこに理解するのは難しいですあなたはそれらを持っています。

最初に、エラーメッセージは非常に明確です。フォームの__str__メソッドはself.contentを指しますが、フォームクラスにはcontent属性がありません。フィールドにはcontentのフィールドがありますが、self.contentでアクセスすることはできません。とにかく、フィールドの文字列表現はHTML入力です。これはフォームがテンプレートのフィールドをレンダリングする方法です。

第2に、提出されたデータに実際にアクセスする方法については、フォームのcleaned_data辞書を介してドキュメントも明確です。したがって、あなたの場合、コンテンツの値はform.cleaned_data['content']になります。

しかし、第3に、あなたはそれをとにかく行う必要はありません。 form.save()は既にフォームからのデータでモデルインスタンスを生成します。もう一度設定する必要はありません。

フォームのドキュメントを読むには、full explanationフォームを作成してビューで使用する方法があります。

最後に何らかの理由で何かの文字列表現にアクセスする必要があったとしても、ダブルアンダースコアメソッドを直接呼び出すべきではありません。 Pythonでこれを行う方法は、常に組み込み関数(この場合はstr(formIssues))を使用します。

関連する問題