标签: django-widget

无法覆盖ModelForm中的SelectMultiple小部件(Django)

我有一个要在表单中呈现的ManyToManyField,作为CheckboxSelectMultiple小部件.为什么这些方法都不起作用?(请参阅下面的尝试#1,#2和#3.)根据我在文档和SO中阅读的所有内容,至少其中一个应该有效.但我仍然有一个顽固的SelectMultiple小部件拒绝让步.

from django.forms.widgets import CheckboxSelectMultiple  
from django.db import models
from django import forms

KEYWORD_CHOICES = (('sky', 'sky'),('wind','wind'),)

class Keyword(models.Model):
    keyword = models.CharField(max_length=50)
    def __unicode__(self):
        return self.keyword

class Feedback(models.Model):
    summary = models.CharField(max_length=200)
    keys = models.ManyToManyField(Keyword, blank=True, null=True)

###################################
class FeedbackForm(forms.ModelForm):
    # attempt 1
    # based on 
    # http://docs.djangoproject.com/en/dev/ref/forms/widgets/#specifying-widgets
    keys = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                     choices=KEYWORD_CHOICES)
    class Meta:
        model = Feedback
        # attempt 2
        # based on 
        # http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets
        widgets = {
            'keys':CheckboxSelectMultiple(),
            }
    # attempt 3
    # based on 
    # bitkickers.blogspot.com/2010/05/django-manytomanyfield-on-modelform-as.html
    def __init__(self, *args, …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-widget

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

如何更改django的selectDateWidget的年份选项

我想将django的selectDateWidget用于表单,但多年的选项是2012-2021.我需要显示过去的几年,可能要到1980年.我如何修改selectDateWidget?

lessTime = forms.DateField(required=False, widget=SelectDateWidget())
Run Code Online (Sandbox Code Playgroud)

django django-widget

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

覆盖小部件属性中模型上设置的 max_length

Model我设置字段的最大长度:

short_description = models.CharField(max_length=405)
Run Code Online (Sandbox Code Playgroud)

ModelForm小部件属性中,我设置了最小长度和最大长度:

class ItemModelForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['name', 'short_description', 'description']
    widgets = {
            'name': TextInputWidget(attrs={'placeholder': 'Name*'}),
        'short_description': TextareaWidget(attrs={'minlength': 200, 'maxlength': 400}) 
Run Code Online (Sandbox Code Playgroud)

}

HTML 中的问题是 minlegth 来自小部件,但 maxlength 仍然取自模型(405 而不是 400)。

我希望小部件属性覆盖模型属性。

django django-forms django-widget

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

如何改变CharField的大小

此代码正在更改类中所有 CharField 的大小。如何更改一个 CharField 的大小?

formfield_overrides = {
    models.CharField: {'widget': TextInput(attrs={'size': '20'})},
}
Run Code Online (Sandbox Code Playgroud)

python django textinput django-admin django-widget

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

是否有django表单的"SelectDateTime"小部件?

基本上与SelectDate Widget相同,但也有一个小时组件.似乎无法在官方文档中找到一个?

django django-forms django-widget

0
推荐指数
1
解决办法
2918
查看次数

django:SplitDateTimeWidget忽略date_format

我正在尝试使用SplitDateTimeWidget,但希望它以日 - 月 - 年格式接受日期.

from django.forms.widgets import SplitDateTimeWidget

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')}
Run Code Online (Sandbox Code Playgroud)

SplitDateTimeWidget接受一个date_format参数,我希望该参数用于验证日期输入,但事实并非如此.

默认窗口小部件已正确替换,但它忽略了date_format,并坚持要对默认的月 - 日 - 年进行验证.

我也试过没有运气设置DATE_FORMAT和DATE_INPUT_FORMATS设置.

谢谢你的帮助.

django django-forms django-widget

0
推荐指数
1
解决办法
3426
查看次数

如何使用小部件属性而不是 css 更改 django 表单中下拉字段的宽度

我试图让我的 Django 表单中的所有字段都具有相同的大小以看起来整洁。我有文本输入、下拉和文本区域。我正在使用Ticket模型创建表单,因此我没有明确定义表单字段。我能够调整文本输入的大小,但是控制宽度的下拉字段中的属性是什么?请注意,下拉列表中的选项基本上是来自模型中定义的另一个表的外键。

class NewTicket(forms.ModelForm):

    class Meta:
        model=Ticket

        fields = ('subject','business','project','description')

        widgets={
            'subject': forms.TextInput(attrs={'size': '20px'}),
            'business': forms.Select(attrs={'size': '20px'}) #this line does not work
            }
Run Code Online (Sandbox Code Playgroud)

django django-forms django-widget

0
推荐指数
1
解决办法
3258
查看次数

Django 管理 CheckboxSelectMultiple 小部件不适用于 ManyToManyField

我使用下面的模型,其中默认的 django 用户表与 Hotel 具有多对多关系。

在 django 管理面板中将多个用户分配给酒店很困难,我想将默认的“ctrl-click”方法替换为复选框,在该复选框中我可以选择多个用户而无需按住 ctrl。

模型:

from django.db import models
from django.contrib.auth.models import User

class Hotel(models.Model):
    # associate the user
    user = models.ManyToManyField(User)
    # additional fields
    hotel_name = models.CharField(max_length=100)
    hotel_id = models.CharField(max_length=100)

    def __str__(self):
        return self.hotel_id
Run Code Online (Sandbox Code Playgroud)

管理员.py

from django.contrib import admin
from .models import *
from django.forms import CheckboxSelectMultiple


# Checkbox for many-to-many fields
class HotelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.ManyToManyField: {'widget': CheckboxSelectMultiple},
    }

admin.site.register(Hotel)
Run Code Online (Sandbox Code Playgroud)

结果:formfield_override不起作用,选择用户入住酒店不是一个复选框 在此输入图像描述

python django many-to-many django-admin django-widget

0
推荐指数
1
解决办法
2402
查看次数

使用小部件更改 Django 表单中标签的 CSS

我正在尝试将 CSS 样式应用到 Django(版本 3.1.3)中的管理登录表单。我可以通过该forms.TextInput(attrs={'class':'textinputclass'})方法使用 Widgets 轻松自定义输入,但是似乎无法将 CSS 类添加到标签中?我可以将标签设置为“false”,以便它根本不显示,但理想情况下我希望能够将 CSS 类与其关联。

我下面的代码显示了用于用户名和密码文本输入的小部件。我如何为标签做类似的事情?

class MyAuthForm(AuthenticationForm):
    class Meta:
        model = Lesson
        fields = ['username', 'password']

    def __init__(self, *args, **kwargs):
        super(MyAuthForm, self).__init__(*args, **kwargs)
        self.fields['username'].widget = forms.TextInput(attrs={'class': 'input', 'placeholder': 'Username'})
        self.fields['username'].label = False
        self.fields['password'].widget = forms.PasswordInput(attrs={'class': 'input', 'placeholder': 'Password'})
        self.fields['password'].label = False
Run Code Online (Sandbox Code Playgroud)

css django django-forms django-widget

0
推荐指数
1
解决办法
3018
查看次数