pfc*_*ise 2 django django-forms django-widget
我有一个要在表单中呈现的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, **kwargs):
super(FeedbackForm, self).__init__(*args, **kwargs)
self.fields["keys"].widget = CheckboxSelectMultiple()
self.fields["keys"].queryset = Keywords.objects.all()
Run Code Online (Sandbox Code Playgroud)
我使用fixture来填充我的初始Keyword实例.
我也试图覆盖help_text但没有成功.
在我views.py我使用的是一个formset:
from app.models import *
from django.forms.models import modelformset_factory
def submit(request):
FeedbackFormSet = modelformset_factory(Feedback, extra=1)
#[...]
feedbackforms = FeedbackFormSet(prefix='feedback',queryset=Feedback.objects.none())
Run Code Online (Sandbox Code Playgroud)
但我不知道这会有什么影响.
我正在使用Django版本1.2.1.
您必须告诉modelformset_factory使用您的自定义FeedbackForm:
FeedbackFormSet = modelformset_factory(Feedback, form=FeedbackForm, extra=1)
Run Code Online (Sandbox Code Playgroud)
在那之后,你的三种方法之一应该工作(我更喜欢Django 1.2的第二种方法).
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |