最近我一直在玩Django 1.4.3(Python 2.7),我需要一个模型字段来让它的选择动态加载。 基本上,我需要从某处注册可能的选项的可能性。Django模型的动态选择
首先我想:
巴阿,这会是容易的。 Python的引用
它不会去那么好通过列表...
这里是为我工作的片段:
models.py
class CategoryModels:
def __init__(self):
self.category_models = [
['dummy', 'dummy']
]
def register(self, model, label=None):
if label == None:
label = model.split('.').pop()
self.category_models.append([model, label])
def get_models(self):
return self.category_models
category_models = CategoryModels()
class Category(models.Model):
MODEL_CHOICES = category_models.get_models()
name = models.CharField(blank=False, unique=True, max_length=30)
model = models.CharField(blank=False, max_length=30, choices=MODEL_CHOICES)
admin.py
import app
app.models.category_models.register('app.models.Entity')
app.models.category_models.register('app.models.OtherModel')
它的工作原理,但...请注意,该列表包含一些“虚拟”条目。奇怪的是,没有“虚拟”条目,它不起作用(你只是得到一个常规的输入字段)。 我已经做了一些关于这个主题的研究,发现了其他的解决方案,例如延迟加载等等。 但是这个似乎是最简单的,也是最清楚的。 我只是想知道为什么没有“虚拟”条目它不起作用?为什么选择是空的。 也打破,如果你这样做:
def get_models(self):
return self.category_models.reverse()
是否有事可做与Python或Django的机制? 我正在寻找这种行为的解释。
谢谢!
“it break”是什么意思?给我们完整的python错误。 – rantanplan 2013-02-14 12:56:20
你只是得到一个常规的输入字段。就好像选择参数是空的。 – 2013-02-14 13:13:52
您的反向示例包含一个错误,因为reverse()返回None。应该是:“return reversed(self.category_models.reverse())” – 2015-02-11 14:49:37