1
在ListView
我使用分頁符與paginate_by = 5
呈現表。 在每一行我都有一個按鈕,打開UpdateView
。 成功更新後,我回到了我的ListView
,但始終在第一頁上。 如何更改success_url
以便我回到頁碼上,從那裏打開UpdateView
? 在Django中有沒有正確的方法來解決這個問題?Django分頁 - 如何重定向回到ListView和頁碼
#views.py
class Orders_list(ListView):
model = Order
context_object_name = "orders"
queryset = Order.objects.all()
paginate_by = 5
template_name = "orders/orders_list.html"
#http://127.0.0.1:8000/orders/?page=4
class Orders_update(UpdateView):
model = Order
form_class = Order_UpdateForm
template_name = "orders/orders_update.html"
#success_url = '../../../orders/'
success_url = reverse_lazy('orders')
#urls.py
urlpatterns = [
url(r'^orders/$', Orders_list.as_view()),
url(r'^orders/detail/(?P<pk>\d+)/$', Orders_detail.as_view()),
]
#forms.py
class Order_UpdateForm(forms.ModelForm):
class Meta:
model = Order
fields = ['order_text', 'customer', 'cyclist']
def __init__(self, *args, **kwargs):
super(Order_UpdateForm, self).__init__(*args, **kwargs)
self.fields['cyclist'].queryset = Cyclist.objects.filter(active=True)
#models.py
class Order(models.Model):
customer = models.ForeignKey('Customer')
cyclist = models.ForeignKey('Cyclist')
order_text = models.CharField(max_length=200)
pick_up = models.CharField(max_length=200)
destination = models.CharField(max_length=200)
created_date = models.DateTimeField(default=timezone.now)
changed_date = models.DateTimeField(blank=True, null=True)
def created(self):
self.changed_date = timezone.now()
self.save()
def __str__(self):
return self.order_text
class Customer(models.Model):
company_name = models.CharField(max_length=200)
created_date = models.DateTimeField(default=timezone.now)
changed_date = models.DateTimeField(blank=True, null=True)
def created(self):
self.changed_date = timezone.now()
self.save()
def __str__(self): return self.company_name
class Cyclist(models.Model):
lastname = models.CharField(max_length=20)
firstname = models.CharField(max_length=20)
created_date = models.DateTimeField(default=timezone.now)
changed_date = models.DateTimeField(blank=True, null=True)
active = models.BooleanField(default=True)
def created(self):
self.changed_date = timezone.now()
self.save()
def __str__(self):
return self.lastname
更新
我找到了一種方法來解決這個(可能)。但我仍然錯過了一些東西。
我做了什麼至今:
在ListView
模板我伸出網址...
window.open("{{ request.path }}update/" + id + "/?page=" + {{ page_obj.number }});
...然後在視圖中我已改寫了get_context_data
方法...
#views.py
class Orders_update(UpdateView):
model = Order
form_class = Order_UpdateForm
template_name = "orders/orders_update.html"
page = "1" # Assigned
def get_context_data(self, **kwargs):
context = super(Orders_update, self).get_context_data(**kwargs)
page = self.request.GET.get('page') # Modified
return context
success_url = '../../../orders/?page=' + str(page) # Should be used here to redirect to a specific page on a ListView
...但是現在...我怎樣才能訪問變量page
在views.py
在success_url
? 我認爲這是非常基本的東西(希望),我想我不明白範圍是如何在Python中工作的。
我更新了我的問題,看看views.py。 – oldsport
ListView沒有success_url屬性或get_success_url()方法。所以你可以重寫'render_to_response(self,context,** response_kwargs)',然後爲你的url提供一個HttpResponseRedirect,同樣你也提供了上下文數據 – cutteeth