У меня есть приложение Django, где я пытаюсь создать форму, которая динамически заполняет раскрывающийся список на основе предыдущего раскрывающегося списка.
упрощенные модели:
class VehicleMake(models.Model):
make = models.CharField(max_length = 30)
class VehicleModel(models.Model):
model = models.CharField(max_length = 80)
make = models.ForeignKey(VehicleMake)
class Listing(models.Model):
make = models.ForeignKey(VehicleMake)
model = models.ForeignKey(VehicleModel)
Форма:
class DynamicChoiceField(ModelChoiceField):
def clean(self, value):
return value
class MyForm(ModelForm):
category = ModelChoiceField(VehicleCategory.objects, widget=forms.Select(attrs={'onchange':'FilterMakes();'}))
make = DynamicChoiceField(VehicleMake.objects,widget=forms.Select(attrs={'disabled':'true','onchange':'FilterModels();'}), empty_label="Select Model")
model = DynamicChoiceField(VehicleModel.objects,widget=forms.Select(attrs={'disabled':'true'}), empty_label="Select Make")
class Meta:
model = Listing
Вид:
def new_listing(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
form.save()
else:
form = MyForm()
return render_to_response("newlisting.html", {
"form": form,'model_id':model_id,'make_id':make_id
})
У меня также есть определенный ajax для автозаполнения, но это не проблема
Когда я отправляю форму, я получаю следующее:
Cannot assign "u'2'": "Listing.make" must be a "VehicleMake" instance.
если я попытаюсь
make=VehicleMake.objects.get(pk=request.POST['make'])
form.fields['make'] = make
тогда я получу
'VehicleMake' object has no attribute 'widget'