Django:从视图更新对象,没有模型或模板

Django: Update object from view, with no model or template

我目前正在开发一个 Django 应用程序,它允许用户为关键字设置同义词。 它使用以下模型:

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

ListView 为用户提供概览,每个条目后跟一个 'edit' 按钮,链接到相关的 允许用户更改 'value' 参数的 EditView。

我现在想添加一个按钮,允许用户快速将对象重置为其原始含义(将 'value' 设置为 'key' 的值) 我希望这是一个单一的按钮,没有任何表单或 html 模板。只是列表上的一个按钮,当按下时,'resets' 模型的值。

我想我必须为此任务编辑一个 EditView,但是,这些视图一直要求我向它们提供表单或 HTML template/page 这不是我想做的。

有没有办法更改 EditView,使其更改对象的值,而无需将用户重定向到表单或新网页?

编辑: 为了完整起见,我添加了 UpdateView,因为我目前正在使用它

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])

我的问题算是解决了。我放弃了使用基于 class 的视图,而是使用了以下函数:

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)

通过这种方式重置值,无需转到单独的网页。我仍然希望有一天能找到如何在基于 class 的视图中执行此操作。但现在这就足够了。