Python 让对象状态决定Django中的form_类

Python 让对象状态决定Django中的form_类,python,django,Python,Django,我有一个经理 class OrderManager(models.Manager): STATE_REQUESTED = 0 STATE_PROCESSED = 1 STATE_CONFIRMED = 2 STATE_CHOICES = [ (STATE_REQUESTED, _('Requested')), (STATE_PROCESSED, _('Processing')), (STATE_CONFIRMED,

我有一个经理

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\u orders']=Order.objects.requested()
的queryset填充模板,并用

{% 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 %}
{%if请求的\u订单中的对象%}
...
...
{%elif对象在已处理的\u订单%}
...
...
{%endif%}

但是这是一种聪明的方法吗?

难道你不能有一个直接包含类型作为选择器的url吗

url(
    r'^(?P<action>[-\w]+)_order/(?P<id>[0-9]+)$', 
    views.YourView, 
    name="order")
url(
r′^(?P

您不能将包含该类型的url直接用作选择器吗

url(
    r'^(?P<action>[-\w]+)_order/(?P<id>[0-9]+)$', 
    views.YourView, 
    name="order")
url(
r′^(?P

您可以重写get\u form\u class()方法并为每个对象状态返回不同的表单。您还可以重写get\u template方法以根据对象状态返回不同的模板。

您可以重写get\u form\u class()方法,并为每个对象状态返回不同的表单。您还可以重写get_template方法,根据对象状态返回不同的模板。

将templatename属性添加到模型中并使用{%include object.templatename%}怎么样在模板中?向模型中添加templatename属性并在模板中使用{%include object.templatename%}怎么样?向模型中添加templatename属性并在模板中使用{%include object.templatename%}怎么样?