Django如何根据选择字段验证请求的URL?

时间:2011-08-01 01:28:45

标签: python django django-views

我正在编写的应用程序中的某个模型中有一个选择字段。为了论证,它看起来像:

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

等。这是非常不优雅的 - 有更好的解决方案吗?

2 个答案:

答案 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只是保存它其他明智的显示错误消息。