我有一位经理
class OrderManager(models.Manager):
STATE_REQUESTED = 0
STATE_PROCESSED = 1
STATE_CONFIRMED = 2
STATE_CHOICES = [
(STATE_REQUESTED, _('Requested')),
(STATE_PROCESSED, _('Processing')),
(STATE_CONFIRMED, _('Confirmed')),
]
def requested(self):
return self.filter(state=self.STATE_REQUESTED)
对于订单可以处于的每个州,需要不同的UpdateView
。
控制此问题的最佳方法是什么?我可以为每个州制作一个视图,例如RequestOrderView
,ProcessOrderView
和ConfirmOrderView
。但是,如何在模板中检查链接应指向哪个视图?
如何在视图和模板中检查对象是否处于特定状态?我想我可以使用context['requested_orders'] = Order.objects.requested()
的查询集填充模板,并使用
{% if object in requested_orders %}
...
<a href="{% url 'process_order' object.id %}">Process order</a>
...
{% elif object in processed_orders %}
...
<a href="{% url 'confirm_order' object.id %}">Confirm order</a>
...
{% endif %}
但这是一种聪明的方法吗?
答案 0 :(得分:0)
你有没有一个直接包含该类型的网址作为选择器?
url(
r'^(?P<action>[-\w]+)_order/(?P<id>[0-9]+)$',
views.YourView,
name="order")
并创建如下链接:
<a href="{% url 'order' id=object.id action=object.action %}">
{{ object.action }} order
</a>
答案 1 :(得分:0)
您可以覆盖get_form_class()方法并为每个对象状态返回不同的表单。您还可以覆盖get_template方法,以根据对象状态返回不同的模板。