我正在尝试创建一个与下拉框相关联的整数字段,以收集用户的时间段。从那里我想将它存储在一个表格中,以某种可读格式存储在机器中,例如12W,我可以分割对象并在今天的日期添加12周并填写截止日期字段。
例如
[12][Days]
[weeks]
[Months]
这会是客户小部件吗?还是有更好的方法来完成它?
答案 0 :(得分:1)
如果你只想要一个表单,你可以使用两个表单字段,这两个字段都存在于Django中,以及它们的默认小部件。
IntegerField (forms) + ChoiceField (forms) choices类[[0, "Days"],[1, "Weeks"],[2, "Months"],]
所以它看起来像:
class MyForm(forms.Form):
amount = forms.IntegerField(label='Your name')
units = forms.ChoiceField(choices=[[0, "Days"],[1, "Weeks"],[2, "Months"],])
如果您希望模型分别存储这两个值,您可以使用(IntegerField (models)和您偏好的某些字段choices)。然后使用ModelForm,这样您就不需要在表单上定义任何字段了。
如果您想要比2个单独的值更多的机器格式...检查您的数据库是否可以存储间隔并考虑使用DurationField。但是,您将无法使用2个小部件自动创建整齐的表单。
答案 1 :(得分:0)
INT_CHOICES = [(x, x) for x in range(1, 60)]
在模型中:
date_interval = models.PositiveIntegerField(choices=INT_CHOICES, default=1)
以模型形式:
class SomeForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['x1', 'x2'..., 'date_interval']
widgets = {'date_interval': forms.Select(choices=INT_CHOICES)
这应该可以解决问题。
我对以上答案中的“ forms.ChoiceField”可以工作感到有些惊讶。参见how to use forms choicefield inside modelform。