代码之家  ›  专栏  ›  技术社区  ›  Jasper

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

  •  1
  • Jasper  · 技术社区  · 7 年前

    我目前正在开发一个Django应用程序,允许用户设置关键字的同义词。

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

    列表视图为用户提供概述,每个条目后面都有一个“编辑”按钮,该按钮链接到相关的 EditView,允许用户更改“value”参数。

    我现在想添加一个按钮,允许用户快速将对象重置为其原始含义(将“value”设置为“key”的值)

    这不是我想做的。

    编辑:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Jasper    7 年前

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

    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)
    

    这样就可以重置该值,而无需转到单独的网页。我仍然希望有一天能在基于类的视图中找到如何做到这一点。但就目前而言,这就足够了。