J'ai un DeleteView
que j'utilise pour supprimer des objets d'un modèle. Il est lancé via un bouton dans une table. Ça fonctionne bien.Comment inverser_lazy en une vue/url avec variable?
class DeleteAssignment(DeleteView):
model = Assignment
success_url = reverse_lazy('company')
Je veux juste avoir revenir à sa vue parent en cas de succès. Je l'ai actuellement rediriger vers le parent parent (company
), car cette vue ne nécessite pas de variable. Ce serait simple, mais la vue parent exige une farm_id
variable pour rendre, cela est pris de l'URL comme «/ferme/18 »
url(r'^farm/(?P<farm_id>.+)', views.farm, name='farm'),
J'ai résolu ce problème avec des formes sur la page en leur faisant redirigent à la vue farm
avec la variable farm_id
.
return redirect(farm, farm_id=farm_id)
Comment pourrais-je faire avec le success_url
pour mon DeleteView
?
Exemple Nickie:
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'))
]
C'est une vue réoriente se forme lors de la soumission de succès. Cela recharge les tables en fonction de la soumission de l'utilisateur sans avoir à traiter avec js pour le moment.
Le farm_id
en return redirect(farm, farm_id=farm_id)
est capturé à partir de l'URL, via la ligne appropriée dans urls.pyurl(r'^farm/(?P<farm_id>.+)', views.farm, name='farm'),
C'est tout ce que je veux faire le point de vue de suppression, au lieu de l'URL de succès étant simplement une vue , une vue avec une variable comme je l'ai fait ci-dessus.
Je suppose que vous avez vu [ce] (https://docs.djangoproject.com/en/1.11/ref/class- based-views/mixins-editing/# django.views.generic.edit.DeletionMixin.success_url) et ce n'est pas suffisant pour vous. – nickie
Vous devez ajouter ** urls.py ** pour que les utilisateurs comprennent exactement ce que vous voulez faire. –
@nickie Cela a fonctionné parfaitement! Je ne sais pas comment j'ai raté ça. 'success_url ="/farm/{farm_id} "' – Jon