标签: django-widget

用于ManyToMany字段的Django Custom Widget

有没有人知道显示2个选择框的小部件.一个显示模型中所有对象的列表,另一个显示已选择的对象.然后,用户可以从第一个列表中选择一个对象,单击>>按钮将其移动到"选定"列表.然后,当保存表单时,所选列表中的对象将保存在manytomany字段中.

谢谢

django django-forms django-widget

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

带选择窗口小部件的Django ModelForm - 使用object.uid作为默认选项值而不是object.id

我有一个继承自ModelForm的表单:

class ChildModel(ModelForm):
      class Meta:
          model = Documents
          fields = ('secretdocs')
          widgets = {
              'secretdocs': Select(attrs={'class': 'select'}),
          }
Run Code Online (Sandbox Code Playgroud)

模型"secretdocs"有一个uid.但是当它打印出select和option时,选项值显示如下:

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="1">My Secret Doc</option>
</select>
Run Code Online (Sandbox Code Playgroud)

但是我希望它具有选项的uid:

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="cd2feb4a-58cc-49e7-b46e-e2702c8558fd">My Secret Doc</option>
</select>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试图使用BaseForm的数据对象并覆盖Select的value_from_datadict方法,但我很确定这不是正确的方法.有谁知道我怎么做到这一点?

提前致谢.

django django-forms django-widget

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

如何将上下文变量从视图传递到Django模板中的自定义字段/小部件?

我已经为子类提供的表单定义了一个自定义字段和小部件UpdateView。因此,如下所示:

myapp/forms.py

from .form_fields import MyCustomField
from .widgets import MyCustomWidget

class MyModelForm(forms.ModelForm):

    my_field = MyCustomField(queryset=MyModel.objects.all(), widget=MyCustomWidget)
Run Code Online (Sandbox Code Playgroud)

myapp/views.py

from django.views.generic import UpdateView
from .forms import MyModelForm

class MyView(UpdateView):
    form_class = MyModelForm
Run Code Online (Sandbox Code Playgroud)

myapp/widgets.py

from django.forms import Widget
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe

class MyCustomWidget(Widget):
    context_data = { 'custom_data': custom_data }
    html_output = render_to_string('myapp/widgets/my_custom_widget.html', context_data)
    return mark_safe(html_output)
Run Code Online (Sandbox Code Playgroud)

基本上,我希望能够custom_data从我的视图(例如,从会话存储或表单实例)传递到小部件。

django django-forms django-views django-widget

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

如何手动渲染表单选择

我有form.py

SELECT_PRODUCT = [
    ('item1', 'item1'),
    ('item2', 'item2'),
    ('item3', 'item3'),
    ('item4', 'item4'),
]

class OrderBonus(forms.Form):
    select_product = forms.CharField(widget=forms.Select(choices=SELECT_PRODUCT ))
Run Code Online (Sandbox Code Playgroud)

在HTML中,我需要单独渲染每个选项:

<select name="{{ form_bonus.select_product .name }}">
    <option value="{{form_bonus.select_product.field.choice.0}}">{{form_bonus.select_product.field.choice.0}}</option>
    <option value="{{form_bonus.select_product.field.choice.1}}">{{form_bonus.select_product.field.choice.1}}</option>
    <option value="{{form_bonus.select_product.field.choice.2}}">{{form_bonus.select_product.field.choice.2}}</option>
 </select>
Run Code Online (Sandbox Code Playgroud)

我尝试不同的方式:1)form_bonus.select_product.field.choice.0 2)form_bonus.select_product.field.choice.[0] 3)form_bonus.select_product.field.choice.("0")

我尝试迭代:

{% for choice in form_bonus.select_product.field.choices %}
    {{ choice }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

要么

{% for value, text in form_bonus.select_product.field.choices %}
    {{ value}} - {{ text }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何覆盖Select Widget以使用每个选项: form_bonus.select_product.field.choice.0ect.

Python 3.5.2和Django 1.10

django django-widget

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

将css类应用于forms.RadioSelect小部件

我正在使用ModelForm并尝试在Django forms.RadioSelect小部件上设置一个css类

class Meta:
    model = models.MyModel
    fields = ('rating',)
    widgets = {
      'rating': forms.RadioSelect(attrs={'class':'star'}),
    }
Run Code Online (Sandbox Code Playgroud)

但是class ='star'不会在html中呈现.

我也试过用:

def __init__(self, *args, **kwargs):
    super(MyModelForm, self).__init__(*args, **kwargs)
    self.fields['rating'].widget.attrs['class'] = 'star'
Run Code Online (Sandbox Code Playgroud)

这也没用.我尝试使用forms.Textarea小部件做同样的事情,在那里我能够获得css类.

我在这里做错了什么或者RadioSelect不支持class属性(我希望类名应用于所有无线电输入)?

django django-forms django-widget

3
推荐指数
1
解决办法
3503
查看次数

Django简单形式“对象没有属性'is_hidden'”

我正在尝试渲染一个没有数据库模型的简单表单,但出现错误。以下是代码:

from django import forms
from django.utils.safestring import mark_safe
class ContactForm(forms.Form):
    category_options = (
        ('select category', '--Select Category--'),
        ('fire safety', 'Fire Safety'),
        ('batteries/solar panels', 'Batteries/Solar Panels'),
        ( 'cctv systems','CCTV Systems')
    )
    category = forms.ChoiceField(label="Select a Category", choices=category_options, required=True)
    full_name = forms.CharField(required=False)
    email = forms.EmailField()
    phone = forms.CharField(widget=forms.IntegerField)
    message = forms.CharField(widget=forms.Textarea(attrs={'cols': 10, 'rows': 10}))

    def clean_email(self):
        email = self.cleaned_data.get('email')
        
        return email
Run Code Online (Sandbox Code Playgroud)

我没有正确处理电话字段。我需要添加电话号码验证,但无法找出使用 IntegerField 小部件的正确方法。

我需要找到添加电话字段的准确方法。

我收到错误:

AttributeError at /contact/
'IntegerField' object has no attribute 'is_hidden'
Run Code Online (Sandbox Code Playgroud)

当我使用时我得到以下结果

phone = forms.CharField(widget=forms.NumberInput)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我从不同字段的 python …

python django django-forms django-widget python-3.x

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

Django ManytoManyField 和小部件

我有两个模型,产品和类别以及产品中的多对多字段。类别在 ProductCreate 视图中显示为键。

我需要为类别自定义小部件和字段。

我检查了 Django 源字段和小部件,但没有看到 ManyToMany 的引用(类)。

什么类型的 Field 和 Widget ManyToMany 关系对应(我假设是 Charfield 作为 save 还是 SelectField)?我在哪里可以找到代码?(在这种情况下自定义字段/小部件的示例)

django django-forms django-widget

3
推荐指数
1
解决办法
9229
查看次数

Django 自定义小部件渲染

一般问题

假设你有某个型号

class MyModel(models.Model):
    Name = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

以及您用于创作的随附表格

class CreateMyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name']
Run Code Online (Sandbox Code Playgroud)

在正常情况下,当在模板中呈现表单时,我通常会循环遍历模板中的字段

{%for field in form%}
{{field}}
{%endfor%}
Run Code Online (Sandbox Code Playgroud)

当需要自定义样式时,我通常不得不将我的<div>s 和s 放入该循环中,并在子类中<span>指定基本小部件及其。attrsMeta

浏览有关该主题的Django 文档,我明白似乎我必须使用Media子类才能使所有操作发生在 的widgets属性中Meta,但我就是无法理解它。

具体问题

假设我有一个模板,其中TextInput需要呈现表单,如下模板所示

<div class="form-group input-group">
    <span class="input-group-addon">Name</span>
        <input type="text" name="name" class="form-control" placeholder="MyModel Name">
</div>
Run Code Online (Sandbox Code Playgroud)

我如何创建一个小部件,以便我可以通过使用以下方法获得相同的结果:

class CreateMyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name']
        widgets={'name':MyWidget(addon="Name",placeholder="MyModel Name")}
Run Code Online (Sandbox Code Playgroud)

我知道占位符是我可以放入 的attrs …

django django-forms django-widget

3
推荐指数
1
解决办法
6922
查看次数

如何在 Django 表单中使用 TimeInput 小部件?

TimeInput 不适用于下面给出的表单。但 SelectDateWidget() 工作正常。当前 TimeInput() 小部件不会创建错误。

建议使用 TimeInput 小部件的正确方法。

表格.py

class TournmentDetails(forms.ModelForm):

    class Meta():
        model = Tournament
        fields = ('eventname','venue','date','time')

        widgets = {
            'date': forms.SelectDateWidget(
                 empty_label=("Choose Year", "Choose Month", "Choose Day"),
            ),
            'time': forms.TimeInput(format='%H:%M'),
        }
Run Code Online (Sandbox Code Playgroud)

模型.py

class Tournament(models.Model):
    eventname = models.CharField(max_length=30, default="None", choices = EVENT_CHOICES)
    venue = models.CharField(max_length=30)
    date = models.DateField(max_length=30)
    time = models.TimeField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

django django-forms django-widget

3
推荐指数
1
解决办法
9362
查看次数

表单中的 Django Media 资源,如何延迟/异步 JS 资源?

官方文档解释了如何自动为某些小部件添加资产。,从他们的示例:

from django import forms

class CalendarWidget(forms.TextInput):
    class Media:
        css = {
            'all': ('pretty.css',)
        }
        js = ('animations.js', 'actions.js')
Run Code Online (Sandbox Code Playgroud)

它没有描述的是如何使 JS 资源延迟或异步加载,例如

<script defer src="https://myserver.com/static/animations.js">/script>
Run Code Online (Sandbox Code Playgroud)

如何添加deferorasync属性?

django django-forms django-widget

3
推荐指数
1
解决办法
613
查看次数