2017-08-10 106 views
1

我目前正在研究一個允許用戶爲關鍵字設置同義詞的Django應用程序。 它使用下面的模型:Django:從視圖更新對象,沒有模型或模板

class UserSynonym(models.Model): 
    user = models.ForeignKey(Tenant) 
    key = models.CharField(max_length=255) 
    value = models.CharField(max_length=255) 

一個ListView爲用戶提供的概述,並且每個條目後面是「編輯」按鈕鏈接到相關 EditView中,允許用戶改變「值」參數。

我現在想要添加一個按鈕,允許用戶快速將對象重置爲其原始含義(將'value'設置爲'key'的值) 我希望這是一個按鈕,沒有任何表單或html模板。只需按下列表上的按鈕,即可「重置」模型的值。

我認爲我必須爲此任務編輯一個EditView,但是,這些視圖保持不變,我爲它們提供了一個表單或一個HTML模板/頁面 這不是我想要做的。

有沒有辦法改變EditView,使它改變對象的值,而不用將用戶重定向到表單或新的網頁?

編輯: 爲了完整起見,我爲我目前使用它

class SynonymUpdate(UserRootedMixin, UpdateView): 
    model = UserSynonym 
    form_class = SynonymCreateForm 

    def get_form_kwargs(self): 
     kwargs = super(SynonymUpdate, self).get_form_kwargs() 
     kwargs['user'] = self.request.user 
     return kwargs 

    def form_valid(self, form): 
     form.instance.linked_user = self.kwargs.get('user') 
     return super(SynonymUpdate, self).form_valid(form) 

    def get_success_url(self, **kwargs): 
     return reverse('synonym_list', args=[self.request.user.id]) 

回答

1

我有點解決我的問題已經加入的UpdateView。我放棄了使用基於類的視圖,並使用以下函數:

def SynonymReset(request, user_id, pk): 
    """(re)sets the Synonym.value to the value of Synonym.key""" 

    #Get relevant variables 
    currentuser = User.objects.get(id=request.user.id) 
    currentsynonym = Synonym.objects.get(id = pk) 

    #(re)set object & save 
    currentsynonym.value = currentsynonym.key 
    currentsynonym.save() 

    #Return to the listview. 
    return redirect('synonym_list', user=current_user) 

這樣的值復位,無需進入單獨的網頁。我仍然希望有一天能夠在基於課堂的觀點中找到如何做到這一點。但現在這已經足夠了。

+1

這裏絕對沒有要查詢用戶的要點。 'currentuser'與* request.user'完全相同的db對象;你應該通過這個。 –