我正在编写的应用程序中的某个模型中有一个选择字段。为了论证,它看起来像:
MANUFACTURERS = (
('sk','skoda')
('vw','volkswagen')
)
class car(models.Model):
manufacturer = models.CharField(max_length='2', choices=MANUFACTURERS)
现在,我想创建一个视图来列出制造商的所有汽车,我将视图连接起来,将制造商参数作为URL的一部分,但问题是验证这确实是一个公认的制造商缩写根据'sk'或'vw'。
最初,我经历了一个导入MANUFACTURERS常量的hacky过程,创建了一个缩写列表,并检查该列表中是否存在给定值。然后迭代MANUFACTURERS常量以获得全名。
for manufacturer in MANUFACTURERS:
manufacturers.append(manufacturer[0])
if url_given_mfn in manufacturers:
continue
else:
raise Http404
等。这是非常不优雅的 - 有更好的解决方案吗?
答案 0 :(得分:2)
我要做的是从可能的制造商那里制作一个字典,例如:
from mymodel import MANUFACTURERS
mdict = dict(MANUFACTURERS)
def myview(request, manufacturer):
if not (manufacturer in mdict):
raise Http404
#--> do what you need to do
这样你就可以看到键(abrevation),如果你想要检索值,只需这样做:
mdict[manufacturer]
您也可以在模型中执行dict,如果愿意,只需导入它。
答案 1 :(得分:0)
我建议你使用Django表格。
from django.forms.widgets import RadioSelect
from model import MANUFACTURERS
class manufacturerTypeForm(forms.Form):
manufacturer = forms.ChoiceField(required = True, label= 'License Type', widget=RadioSelect(), choices=MANUFACTURERS)
所以在视图中你必须只是验证表单。如果验证True只是保存它其他明智的显示错误消息。