标签: django-multiwidget

How do I use Django's MultiWidget?

The documentation is a bit lacking with respect to this feature.

from django import forms

class TwoInputWidget(forms.MultiWidget):
    """An example widget which concatenates two text inputs with a space"""
    def __init__(self, attrs=None):
        widgets = [forms.TextInput, forms.TextInput]
Run Code Online (Sandbox Code Playgroud)

我可以看到我需要创建一个带有其他小部件列表的"小部件"属性,但之后它会得到一个小福尔摩斯.

有人请向我解释如何使用MultiWidget小部件吗?

django django-widget django-multiwidget

45
推荐指数
1
解决办法
2万
查看次数

Django子类化multiwidget - 使用自定义multiwidget在帖子上重建日期

所以我的django书又回到了大学,我正在努力解决这个问题.

我的子类django.forms.widgets.MultiWidget是这样的:

class DateSelectorWidget(widgets.MultiWidget):
    def __init__(self, attrs=None, dt=None, mode=0):  
        if dt is not None:
            self.datepos = dt
        else:
            self.datepos = date.today()    

        # bits of python to create days, months, years
        # example below, the rest snipped for neatness.

        years = [(year, year) for year in year_digits]

        _widgets = (
            widgets.Select(attrs=attrs, choices=days), 
            widgets.Select(attrs=attrs, choices=months),
            widgets.Select(attrs=attrs, choices=years),
            )
        super(DateSelectorWidget, self).__init__(_widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.day, value.month, value.year]
        return [None, None, None]

    def format_output(self, rendered_widgets):
        return u''.join(rendered_widgets)
Run Code Online (Sandbox Code Playgroud)

这给了我一个漂亮的日期选择字段,如下所示: …

python django django-widget django-multiwidget

16
推荐指数
1
解决办法
2934
查看次数

如何在Django中将两个模型字段表示为一个表单字段?

我似乎无法弄清楚如何在Django中正确处理以下情况:

我在模型中有一个日期范围,我将其存储为两个单独的字段,date_start并且date_end:

start_date = models.DateTimeField()
end_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

在此模型的表单中,我想将其表示为一个字段,带有一个标签:

timespan = forms.Field(widget=widgets.SelectDateRangeWidget(), label="Date Range")
Run Code Online (Sandbox Code Playgroud)

就像现在一样,我扩展了MultiWidget以创建SelectDateRangeWidget:

class SelectDateRangeWidget(forms.MultiWidget):
    ...
Run Code Online (Sandbox Code Playgroud)

然后包含两个Date小部件.我想使用它,但随后将其清理为两个单独的模型字段,并保留将初始数据加载到表单字段的功能.是每次手动设置initial为这两个字段的值的唯一方法,可能__init__是在表单的功能中,还可以手动将其清理为这两个模型字段,或者是否有更清洁(可以这么说)的方式来执行此操作?

django django-forms django-multiwidget

13
推荐指数
1
解决办法
1985
查看次数

如何使用 modelform 和 multiwidget

这一切都是新手!我正在努力在前端显示显示为 (xxx)xxx-xxxx 的电话字段。下面是我的代码。我的问题是 1. 所有字段都是必填的,由于某种原因,手机的行为不符合预期。即使留空也不会抱怨 2.我如何测试这个小部件的功能

class USPhoneNumberWidget(forms.MultiWidget):
        def __init__(self,attrs=None):
            widgets = (forms.TextInput(attrs={'size':'3','maxlength':'3'}),forms.TextInput(attrs={'size':'3','maxlength':'3'}),forms.TextInput(attrs={'size':'3','maxlength':'4'}))
            super(USPhoneNumberWidget,self).__init__(widgets,attrs=attrs)

        def decompress(self, value):
            if value:
                val = value.split('-')
                return [val[0],val[1],val[2]]
            return [None,None,None]

        def compress(self, data_list):
            if data_list[0] and data_list[1] and data_list[2]:
                ph1 = self.check_value(data_list[0])
                ph2 = self.check_value(data_list[1])
                ph3 = self.check_value(data_list[2])
                return '%s''%s''%s' %(ph1,ph2,ph3)
            else:
                return None

        def check_value(self,val):
            try:
                if val.isdigit():
                    return val
            except:
                raise forms.ValidationError('This Field has to be a number!')

        def clean(self, value):
            try:
                value = re.sub('(\(|\)|\s+)','',smart_unicode(value))
                m = phone_digits_re.search(value)
                if m:
                    return u'%s%s%s' …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-multiwidget

5
推荐指数
1
解决办法
662
查看次数

使用 MultiWidget 和 MultiValueField 保存表单模型

我试图了解如何通过继承 MultiWidgets 和 MultiValueFields 来创建表单。我有一个简单的地址模型和相关表格:

class Address(models.Model):
    user = models.ForeignKey(User)
    city = models.CharField(max_length=255)
    state = models.CharField(choices = settings.STATES, max_length=50)
    postal = models.CharField(max_length=10)
    address = models.TextField()

    class Meta:
        verbose_name_plural = 'Addresses'

class AddressFieldWidget(forms.MultiWidget):
    def decompress(self,value):
        if value:
            return [value[0],value[1],value[2]]
        return ''

    def format_output(self, rendered_widgets):
        str = ''
        line_1 = '<td class="align_left"><label for="contact_phone">Address Line 1</label></td>'

        for field in rendered_widgets:
            str += '<tr>' + line_1
            str += '<td class="align_right">%s</td></tr>' % field
        return '<tr>' + str + '</tr>'

    def value_from_datadict(self,data,files,name):
        line_list = [widget.value_from_datadict(data,files,name+'_%s' %i) …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-multiwidget

4
推荐指数
1
解决办法
3030
查看次数