2017-08-27 68 views
1

我在Django中還很缺乏經驗,我想知道是否可以直接從模板更新/保存數據庫中的今日日期?更新/直接從模板保存模型日期值?

我有一個Django篩選filterView(列表視圖),它顯示我的部門中我目前在我的數據庫中的人員列表。我想通過點擊列表中顯示的< \ a>鏈接將日期時間值(上次訪問人員時)更新爲今天的日期。這樣我就不需要設置更新視圖來更新我上次訪問同事時的更新視圖。這是甚麼可能嗎?

我的確嘗試在我的models.py中使用@property標記實現一個函數,但是當我刷新網頁或訪問頁面時,它會自動更新它,而無需點擊鏈接。

編輯:這裏是代碼:

# 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?還是我以錯誤的方式去做這件事?任何幫助是極大的讚賞。非常感謝你!

編輯:找到了一個決心。我最終做的是創建了一個執行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