2017-03-12 4 views
2

kwargsがクエリに渡されていますが、値がドロップダウンボックスに表示されず、値がドロップダウンボックスに表示されません。クエリが返されません。kwargs results django

forms.py

class ChooseCarMakeModelForm(forms.Form): 

     car_model = forms.ModelChoiceField(queryset=CarModel.objects.none()) 
     def __init__(self, *args, **kwargs): 
      ids = kwargs.pop('ids', None) 
      super(ChooseCarMakeModelForm, self).__init__(*args, **kwargs) 

      if ids: 
      print 'it worked' 
       self.fields['car_model'].queryset = CarModel.objects.filter(make=ids) 
      else: 
       print 'didnt work' 

ビュー

form = ChooseCarMakeModelForm(request.POST,ids=car_model_ids) 

モデル

class CarMake(models.Model): 

    name = models.CharField(max_length=200) 
    description = models.TextField(null=True, blank=True) 

    def __str__(self):   
     return self.name 

class CarModel(models.Model): 

    name = models.CharField(max_length=200) 
    description = models.TextField(null=True, blank=True) 
    price = models.IntegerField() 
    make = models.ForeignKey('CarMake') 

    def __str__(self):   
     return self.name 
+0

'CarModel'の' make'フィールドは何ですか?また、その間にあなたのフィルタに 'make__in = ids'を試してください。 –

+1

私のモデルは外部キー – thomaSmith

+0

をアップロードしています。 'ids'は' CarMake'の 'ids'のリストに過ぎないと思いますか? –

答えて

1

問題があなたのクエリセットです。 CarMakeオブジェクトのリスト(ids:[1, 3, 4]のリストではなく、[<SomeMake>, <SomeOtherMake>])のリストを仮定すると、のmakeのリストはCarMakeであるため、フィルタはゼロの結果を返します。 CarMakeから、一方で、idsが実際にidsのリストである場合

self.fields['car_model'].queryset = CarModel.objects.filter(make__in=ids) 

(例:あなたが何をしたいのか、Django makes pretty simple内のリスト、であるすべてのCarModel年代にフィルタであり、 。[1, 3, 4])、少し変更するだけです:

self.fields['car_model'].queryset = CarModel.objects.filter(make__id__in=ids) 
+0

私はこれを試して、それは仕事をしませんでした – thomaSmith

+0

これはコードのこの行と関係がありますか?car_model = forms.ModelChoiceField queryset = CarModel.objects.none()) – thomaSmith

+0

問題ではありません。あなたが 'print 'したところで' print ids'を試して、何が吐き出されているのかを見てください。 –

関連する問題