2

CheckboxSelectMultipleウィジェットとしてフォームに表示したいManyToManyFieldがあります。これらの方法のいずれも機能しないのはなぜですか?(以下の試行#1、#2、および#3を参照してください。)ドキュメントおよびSOで読んだすべてのことによると、少なくとも1つは機能するはずです。しかし、私はまだ頑固な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()

フィクスチャを使用して、最初のキーワードインスタンスにデータを入力しました。

また、help_textをオーバーライドしようとしましたが成功しませんでした。

私のviews.py中で私はフォームセットを使用しています:

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())

しかし、それがどのように違いを生むのかわかりません。

Djangoバージョン1.2.1を使用しています。

4

1 に答える 1

5

modelformset_factoryカスタマイズしたものを使用するように指示する必要がありますFeedbackForm

FeedbackFormSet = modelformset_factory(Feedback, form=FeedbackForm, extra=1)

その後、3つのアプローチのいずれかが機能するはずです(Django 1.2では2番目のアプローチをお勧めします)。

于 2010-08-11T08:47:25.983 に答える