1

クエリセット内の一部のオブジェクトのみを表示するドロップダウン リストを表示しようとしていますが、エラーが発生するか、何も表示されないか、すべて表示されます。

models.py
class Book(models.Model):
    name = models.CharField(max_length=200, default='')
    owner = models.CharField(max_length=200, default='') 

    def __unicode__(self):
        return self.name

class DropDownList(forms.Form):
    switch = forms.ModelChoiceField(queryset=Book.objects.none().order_by('name'), widget=forms.Select(attrs={"onChange":'submit()'}), required=False, initial=0)

    def __init__(self, u, *args, **kwargs):
        super(DropDownList, self).__init__(*args, **kwargs)    
        self.fields['switch'].queryset = Book.objects.filter(owner = u)


views.py
d = DropDownList('anthony')

syncdb を実行しようとするとget(Q(owner = u))次のようになり ます。 / ドロップダウンリストに含まれるアイテムをフィルタリングしなかった場合、ドロップダウンリストが正しく表示されました。

4

2 に答える 2

1

フォームが異なるビュー出力で使用されているときにカスタム フィルターが必要な場合は、init をオーバーライドせずに通常どおりフォームを作成してから、フィールド クエリセットを変更することもできます。

def my_view_function():
   switch_query ... view specific filters ...
   form = DropDownList()
   form.fields['switch'].queryset = switch_query 
   ... rest of view render ...

または、コンストラクターを変更して、これらの要素のクエリセットも渡すことができます。

于 2014-08-21T13:49:43.557 に答える