2017-08-10 8 views
1

現在、Djangoアプリケーションでは、ユーザーがキーワードの同義語を設定できるようになっています。Django:モデルやテンプレートのないビューからオブジェクトを更新する

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

リストビューの概要をユーザに提供し、各エントリは、ユーザが「値」を変更することができ、関連する EditViewにリンクする「編集」ボタンが続く:以下のモデルを使用して、その パラメータ。

これで、オブジェクトを元の意味に素早くリセットできるボタンを追加したいと思います( '値'を 'key'の値に設定してください)。 このボタンを1つのボタンにしたいフォームまたはhtmlテンプレート。リスト上のボタンで、押すとモデルの値がリセットされます。

私はこのタスクのEditViewを編集する必要がありますが、これらのビューはフォームまたはHTMLテンプレート/ページ でそれらを提供していることを否定し続けます。

EditViewを変更して、ユーザーをフォームまたは新しいWebページにリダイレクトせずにオブジェクトの値を変更する方法はありますか?

編集:私は現在、私は一種の私の問題を解決し

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オブジェクトです。あなたはただそれを渡すべきです。 –

関連する問題