kwargs传入我的查询,但值没有显示在我的下拉框中,下拉框中没有显示任何值。
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 :(得分:1)
问题在于您的查询集。假设ID为Foo
个对象的列表,(Func<IMyContext>
,而不是ID列表:MyContext
),您的过滤器将返回零结果,因为没有CarMake
有{[<SomeMake>, <SomeOtherMake>]
1}}这是[1, 3, 4]
的列表。您想要做的是过滤所有CarModel
列表中的 Django makes pretty simple:
make
另一方面,如果CarMake
实际上是来自CarModel
的{{1}}列表(例如self.fields['car_model'].queryset = CarModel.objects.filter(make__in=ids)
),那么您只需做一个小改动:
ids