如何用变量reverse_lazy到视图/ URL? - python

我有一个DeleteView,用于从模型中删除对象。通过表格中的按钮启动。它工作正常。

class DeleteAssignment(DeleteView):
  model = Assignment
  success_url = reverse_lazy('company')

如何用变量reverse_lazy到视图/ URL? - python

我只想让它返回成功的父级观点。我目前将其重定向到父级的父级(company),因为此视图不需要变量。这很简单,但是父视图需要变量farm_id进行呈现,这是从网址中捕获的,例如“ / farm / 18”

url(r'^farm/(?P<farm_id>.+)', views.farm, name='farm'),

我已经通过将页面重定向到带有变量farm的视图farm_id来解决了页面上的表单。

return redirect(farm, farm_id=farm_id)

如何为我的success_urlDeleteView做到这一点?

昵称示例:

views.py

 @login_required
    def farm(request, farm_id=None):
        user = request.user
        company_id = user.profile.company_id
        farm_id = farm_id
        farm_filter = Farm.objects.filter(farm=farm_id)
        farm_current = farm_filter[0]
        # farm_company =
        serial_filter = Sensor.objects.filter(assignment__farm__company_id__isnull=True)
        assignment_filter = Assignment.objects.filter(farm=farm_id)
        farm_instance = Farm.objects.get(farm=farm_filter[0].farm)
        update_farm_form = UpdateFarmForm(instance=farm_instance)
        assign_sensor_form = AssignmentForm()

        if request.method == 'POST' and 'updatefarm' in request.POST:
            update_farm_form = UpdateFarmForm(request.POST, instance=farm_instance)
            if update_farm_form.is_valid():
                update_farm_form.save()
                return redirect(farm, farm_id=farm_id)
        else:
            if request.method == "POST" and 'assignsensor' in request.POST:
                assign_sensor_form = AssignmentForm(request.POST)
                if assign_sensor_form.is_valid():
                    assignment = assign_sensor_form.save()
                    if user.is_staff is True:
                        assignment.company_id = farm_filter[0].company_id
                    else:
                        assignment.company_id = user.profile.company_id
                    assignment.save()
                    return redirect(farm, farm_id=farm_id)
                else:
                    assign_sensor_form = AssignmentForm(request.POST)
        return render(request, 'users/farm_template.html', {'company_id': company_id, 'farm_filter': farm_filter, 'farm_current': farm_current, 'serial_filter': serial_filter, 'assignment_filter': assignment_filter, 'update_farm_form': update_farm_form, 'assign_sensor_form': assign_sensor_form})

urls.py

from django.conf.urls import url, include
from django.contrib.auth import views as auth_views

from apps.dashboard import views
from apps.dashboard.views import DeleteAssignment, DeleteFarm

urlpatterns = [
    url(r'^company/', views.company_view, name='company'),
    # url(r'^test/', views.test),
    # url(r'^test2/', views.test2, name='test2'),
    # url(r'^farms/', views.add_farms),
    url(r'^manual-signup/', views.signup_manual),
    url(r'^signup/(?P<company_id>.+)', views.signup_company),
    url(r'^settings/', views.update_profile),
    url(r'^create-company/', views.create_company),
    url(r'^create-sensor/', views.create_sensor),
    url(r'^assign-sensor/', views.assign_sensor),
    url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
    url(r'^logout/$', auth_views.logout, {'next_page': '/login'}, name='logout'),
    url(r'^$', views.main),
    # url(r'^company/(?P<company_id>.+)/farm/(?P<farm_id>.+)', views.farm),
    url(r'^farm/(?P<farm_id>.+)', views.farm, name='farm'),
    url(r'^unit/(?P<sensor_id>.+)', views.unit),
    # url(r'^company/(?P<company_id>.+)', views.company),
    url(r'^download/', views.download),
    # url(r'^export/xls/$', views.export_users_xls),
    url(r'^live/', views.live),
    url(r'^data/', views.data),
    url(r'^debug/', views.debug),
    url(r'^delete-assignment/(?P<pk>\d+)/$', DeleteAssignment.as_view(), name='delete-assignment', ),
    url(r'^delete-farm/(?P<pk>\d+)/$', DeleteFarm.as_view(), name='delete-farm', ),
    url(r'^', include('django.contrib.auth.urls'))
]

成功提交表单后,视图即会重定向到自身。这将根据用户提交的内容重新加载表,而无需立即处理js。

farm_id中的return redirect(farm, farm_id=farm_id)是通过urls.py url(r'^farm/(?P<farm_id>.+)', views.farm, name='farm'),中的相应行从URL中捕获的

这就是我要对删除视图所做的全部操作,而不是将成功URL仅仅是一个视图,而是一个具有变量的视图,就像我上面所做的那样。

参考方案

是的,您可以通过success_url通过以下方式执行此操作:

class DeleteAssignment(DeleteView):
    . . . . . 
    . . . . . 

    . . . . . 
    def get_success_url(self):
          # if you are passing 'pk' from 'urls' to 'DeleteView' for company
          # capture that 'pk' as companyid and pass it to 'reverse_lazy()' function
          companyid=self.kwargs['pk']
          return reverse_lazy('company', kwargs={'pk': companyid})

这应该工作完美。

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

如何修复AttributeError:模块'numpy'没有属性'square' - python

Improve this question 我已经将numpy更新为1.14.0。我使用Windows10。我尝试运行我的代码,但出现此错误: AttributeError:模块“ numpy”没有属性“ square”这是我的进口商品:%matplotlib inline import matplotlib.pyplot as plt import ten…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

AttributeError:'AnonymousUserMixin'对象没有属性'can' - python

烧瓶学习问题为了定制对匿名用户的要求,我在模型中设置了一个类: class MyAnonymousUser(AnonymousUserMixin): def can(self, permissions): return False def is_administrator(self): return False login_manager.anonymous…