我想爲CharField選擇拉取模型類的過濾列表。我明白這些選擇可以是任何可迭代的,只要它包含2個元素元組。Django動態選擇
代碼是這樣的:
WORKFLOWAWARE_MODELS = [(m.__name__, m.__name__) for m in models.get_models() if 'WorkflowAware' in [b.__name__ for b in m.__bases__]]
class Workflow(models.Model):
""" Workflow controls who does what where """
workflow_content_type = models.CharField(max_length=64, choices=WORKFLOWAWARE_MODELS, unique=True, blank=True)
列表理解返回類似這樣的2個元組的列表:
>>> x = [(m.__name__, m.__name__) for m in models.get_models() if 'WorkflowAware' in [b.__name__ for b in m.__bases__]] >>> x [('ActivityContent', 'ActivityContent')] >>> x.__class__ type 'list' >>> x[0].__class__ type 'tuple' >>> x[0][0].__class__ type 'str'
所有我在管理界面得到的是一個標準CharField渲染,沒有選擇。
當我剪切和粘貼由列表理解管理員的返回值呈現的選擇:
WORKFLOWAWARE_MODELS = [('ActivityContent', 'ActivityContent')]
我在想什麼?
PS tuple()沒有區別。
謝謝Mizi。無法得到那個工作。我最終從James Bennett找到了DjangoSnippet(見下文)。 –