我有两个类似的模型:
class Report(Model):
...
product_line = models.OneToOneFiled(ProductLine)
class ProductLine(Model):
name = models.CharField()
...
我希望用户上传一个报告,并指定它属于哪个产品线。产品线字段应该是一个下拉列表,其中包含预定义的产品名称。在
我的问题是如何呈现这个字段以及如何分析返回的值。在
对于渲染,我想我可以这样做:
^{pr2}$在模板中,我可以循环names
并填充下拉列表中的项。我说的对吗?在
保存时:
postHandler():
// This is the part I am not so sure
// Since the value for the product line field will be a string
// I guess I cannot rely on a form object to validate it and expect
// it to pass, am I correct?
// so when I create a form out of ProductLine, I should use
// a customized validator instead:
class ReportForm(Form):
class Meta:
model = Report
clean_product_line():
cd = self.cleaned_data
allProducts = ProductLine.objects.all()
valid_names = []
for p in allProducts:
valid_names.push(p.name)
if cd in valid_names:
return allProducts.filter(name=cd)[0]
raise ValidationError('Invalid product name')
这种方法正确吗?clean_product_line
是进行验证并返回model
对象的正确位置吗?在
一种更简单的方法是在表单定义中添加一个产品线的额外字段:
它将自动处理显示和验证下拉列表。不过,在保存之后,您需要使用cleaned_data中的值手动设置实例上的字段。在
相关问题 更多 >
编程相关推荐