使用下拉框创建整数字段。 Django Custom Widget?

时间:2017-09-27 10:12:09

标签: django django-models django-forms

我正在尝试创建一个与下拉框相关联的整数字段,以收集用户的时间段。从那里我想将它存储在一个表格中,以某种可读格式存储在机器中,例如12W,我可以分割对象并在今天的日期添加12周并填写截止日期字段。

例如

[12][Days]
    [weeks]
    [Months]

这会是客户小部件吗?还是有更好的方法来完成它?

2 个答案:

答案 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