2017-04-09 3 views
0

私のアプリにフィードバックフォームがあります。フィードバックを送信するには、ユーザーがログインしている必要があります。ユーザーは、テキスト領域にフィードバックを入力するよう求められます。投稿時には、submit_byフィールドとsubmit_date(時間も含む)のようなフォームの作成時刻にユーザーの詳細を保存します。submit_dateとsubmitted_byをDjangoのフィードバックフォームに含めるにはどうすればよいですか?

私はauto-now_add=Trueauto_nowの使用に関する多くの議論を読んだことがありますが、このトピックに関する多くの意見があり、やや混乱しています。

私はモデルフォームを使用してユーザーからデータを入力しています。これは私の別のファイルの様子です:

# myapp/models.py 

class Feedback(models.Model): 
    content = models.TextField(max_length=100) 
    submitted_by = models.ForeignKey(User) 
    submitted_date = models.DateTimeField() # what do add here in arguments ? 

    def __str__(self): 
     return self.content + " @ " + self.submitted_date 

# myapp/forms.py 

class FeedbackForm(ModelForm): 
    class Meta: 
     model = Feedback 
     fields = [ 'content' ] 

# myapp/views.py 
def addfeeback(request): 
    if request.method == "POST": 
     form = FeedbackForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      # Do I need to do something here ? 
      return redirect('home') 
    else: 
     form = FeedbackForm() 
    return render(request, 'myapp/addFeedback.html', { 'form': form}) 

# myapp/urls.py 

url(r'^feedback/$', core_views.addfeeback , name='add-feedback'), 

# myapp/templates/addFeedback.html 

{% extends 'registration/base.html' %} 

{% block title %} Feedback {% endblock %} 

{% block content %} 
    <form method="post" > 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit"> 
    </form> 
{% endblock %}  

私のコードに意図した通りに関連する変更を提案できれば幸いです。ありがとう。

答えて

1

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.submitted_by = request.user 
    obj.save() 

auto_now_addを使うことには何も問題はありませんを行うことができます。しかし、あなたは提出者と日付を設定しなければならないので、そうすることで多くを得ることはできません。

パターンは、フォームを保存するときにcommit=Falseを使用し、手動で保存する前に返されるオブジェクトを変更することです。

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.submitted_by = request.user 
    obj.submitted_date = datetime.datetime.now() 
    obj.save() 
    return redirect('home') 
+0

または 'django.utils.timezone.now()'、理想的には;-) –

0

あなたはモデル

submitted_date = models.DateTimeField(auto_now_add=True) 
関連する問題