2017-08-27 7 views
1

私はまだDjangoでかなり経験が不十分で、私のデータベースの今日の日付をテンプレートから直接更新/保存することが可能かどうか疑問に思っていましたか?モデル日付の値をテンプレートから直接更新/保存しますか?

現在私のデータベースにある私の部署にいる人のリストを表示するDjangoフィルタfilterView(listView)があります。そして、リストに表示されている< \ a>リンクをクリックすることで、今日の日付に日付/時刻の値(最後に訪問した時)を今日の日付に更新したいと思います。そうすれば、私は同僚を最後に訪問したときに更新するだけでアップデートビューをセットアップする必要はありません。このようなことは可能ですか?

@propertyタグを使用してmodels.pyに関数を実装しようとしましたが、ウェブページを更新するか、ページを訪れるとリンクをクリックすることなく自動的に更新されます。

編集:ここではコードです:

# models.py 
@property 
def update_visit_date(self): 
    self.last_visit = timezone.make_aware(datetime.datetime.today()) 
    super(Directory, self).save() 
    return reverse('directory_list') 

# snippet from my template directory_list.html 
    {% for contact in items %} 
    <tr> 
     <td>{{ contact.first_name }}</td> 
     <td>{{ contact.last_name }}</td> 
     <th><a href="{{ contact.get_absolute_url }}">{{ contact.email_address }}</a></th> 
     <td>{{ contact.phone_number_1 }}</td> 
     <td>{{ contact.get_department_display }}</td> 
     <td>{{ contact.room_number }}</td> 
     {% if contact.is_past_due == 'no_visit_performed' %} 
     <td class="info">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td> 
     {% elif contact.is_past_due == 'visit_good' %} 
     <td class="success">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td> 
     {% elif contact.is_past_due == 'visit_old' %} 
     <td class="warning">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td> 
     {% elif contact.is_past_due == 'need_visit' %} 
     <td class="danger">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td> 
     {% endif %} 
    </tr> 
    {% empty %} 

は、このテンプレートのリンクからCRUDを実行可能であるが、何ですか?それとも私はこれについて間違った方法をとっていますか?どんな助けでも大歓迎です。どうもありがとうございました!

EDIT:解決策が見つかりました。私がやったことは、CRUDを実行した関数ベースのビューを作成したことです。コードは次のとおりです。

from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
def last_visit_view(request, pk): 
    last_visit_obj = Directory.objects.filter(pk=pk) 
    if last_visit_obj: 
     last_visit_obj = last_visit_obj[0] 
     last_visit_obj.last_visit = datetime.now() 
     last_visit_obj.save() 
    return HttpResponseRedirect(reverse('directory_list')) 

テンプレートのURLはこの関数を呼び出し、うまくいきます。今私は、HttpResponseRedirectでフィルタリングされた結果をどのように保持できるかを確認する必要があります。

答えて

2

テンプレートにリンクするには常にビューが必要です。あなたは何をしようとしているようなCRUDアクションを実行するためにビューをフックアップする必要があります。

テンプレートを再読み込みしたくない場合は、ビューに対するAJAXリクエストを使用してCRUDアクションを実行できます。

共有スニペットで、last_visitを更新するモデルプロパティを作成しました。

このモデルのlast_visitは、テンプレートの補間が実行され、リンクがクリックされたときに更新されることに注意してください。これはあなたが狙っている動作ではないと思われます。

<a href="{{ contact.update_visit_date }}"> 
+1

私は解決策を見つけることができたので、ありがとうございます。私がやったことは、CRUDを実行した関数ベースのビューを作成することでした。私はコードで質問を編集します。 – TVH

関連する問題