我试图弄清楚如何根据前一个字段的输入动态更改 ModelForm 字段。
例如,如果我有这些类型的模型:
class Phone(models.Model):
name = models.CharField(max_length=10)
class Series(models.Model):
name = models.CharField(max_length=10)
class Manufacturer(models.Model):
phone = models.ForeignKey('Phone')
series = models.ForeignKey('Series')
class ManufacturerForm(ModelForm):
class Meta:
model = Manufacturer
这将生成一个表单(ManufacturerForm),其中包含数据库中电话和系列条目的下拉选项。例如,是否可以根据用户输入的不同series
条目集phone
?
根据我在这篇博文中所读到的内容,我已经阅读了有关使用该__init__
方法来完成此操作的信息,但我不确定如何根据我的情况执行此操作。或者也许有更好的方法来实现你已经采取的这一目标?感谢您的任何建议!
编辑:添加了表单的视图。
def make_ad(request):
if request.method == 'POST':
form = ManufacturerForm(request.POST, request.FILES)
if form.is_valid():
a = form.save()
a.user = request.user
a.save()
else:
form = ManufacturerForm()
variables = RequestContext(request, {
'form': form
})
return render_to_response('place.html', variables)
@super9 提到使用 ajax 请求来更改这些元素。我需要检查if request.is_ajax()
,但我应该在什么时候检查这个?以及如何根据 ajax 请求添加或更改查询集?
谢谢你的建议。
编辑:尝试使用 django-smart-selects
不知道如何设置我的模型以利用 django-smart-selects 来完成我正在尝试的事情。以下是我构建模型的方式:
from smart_selects.db_fields import ChainedForeignKey
class Phone(models.Model):
phone = models.CharField(max_length=10)
class Series(models.Model):
series = models.CharField(max_length=10)
phone = models.ForeignKey(Phone)
class SeriesModel(models.Model):
model = models.CharField(max_length=10)
series = models.ForeignKey(Series)
class Manufacturer(models.Model):
phone = models.ForeignKey(Phone)
series = ChainedForeignKey (Series, chained_field = "phone", chained_model_field = "phone")
series_model = ChainedForeignKey (SeriesModel, chained_field = "series", chained_model_field = "series")
但是当我查看我的表单(ModelForm)时,字段series_model
没有正确链接到series
. 我是否缺少使智能选择在第二层抽象上工作的东西?
编辑:上面的代码现在可以工作了。