我有一个要在表单中呈现的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的selectDateWidget用于表单,但多年的选项是2012-2021.我需要显示过去的几年,可能要到1980年.我如何修改selectDateWidget?
lessTime = forms.DateField(required=False, widget=SelectDateWidget())
Run Code Online (Sandbox Code Playgroud) 在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)。
我希望小部件属性覆盖模型属性。
此代码正在更改类中所有 CharField 的大小。如何更改一个 CharField 的大小?
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size': '20'})},
}
Run Code Online (Sandbox Code Playgroud) 基本上与SelectDate Widget相同,但也有一个小时组件.似乎无法在官方文档中找到一个?
我正在尝试使用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 表单中的所有字段都具有相同的大小以看起来整洁。我有文本输入、下拉和文本区域。我正在使用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 用户表与 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)
我正在尝试将 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)