【问题标题】:Django UpdateView without pk in urlurl中没有pk的Django UpdateView
【发布时间】:2013-07-07 20:34:21
【问题描述】:

是否可以从与UpdateView 相关的网址中删除pk

例如,如果我有

url(r'^myobj/update/(?P<pk>\d+)/$', views.UpdateMyObj.as_view(), name="update")

有什么办法可以这样写

url(r'^myobj/update/$', views.UpdateMyObj.as_view(), name="update")

然后在POSTGET请求中将pk作为参数发送?

【问题讨论】:

标签: django django-views django-urls django-class-based-views


【解决方案1】:

是的,您可能只需要覆盖get_object 方法:

from django.views.generic.edit import UpdateView

class UpdateMyObj(UpdateView):
    # .....

    def get_object(self):
        return MyModel.objects.get(pk=self.request.GET.get('pk')) # or request.POST

【讨论】:

  • 你有实现的链接吗?谢谢
  • 使用get_object_or_404获取对象是有意义的
  • 最佳实践是不要在服务器上使用request.GET 进行更新。最好始终使用request.POST
  • @Semmel request.GET 指的是向服务器发出的 get 请求。不是 OP 用来更新数据库记录的方法。
【解决方案2】:

有时候是这样的

class MyViewUpdate(UpdateView):
    def get_object(self, queryset=None):
        obj = self.model.objects.get(my_id_or_name_of_field=self.kwargs['pk_or_field_name']) # instead of self.request.GET or self.request.POST
        return obj

【讨论】:

  • 隐藏关键字是可怕的 - 永远不要使用 object 作为变量名!
  • 感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多