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 的视图中执行此操作。但现在这就足够了。
我目前正在开发一个 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 的视图中执行此操作。但现在这就足够了。