动态字段ModelForms Django

时间:2012-08-29 02:37:57

标签: python django forms dynamic

我试图弄清楚如何根据前一个字段的输入动态更改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条目集?

根据我在this blog post上所读到的内容,我已经阅读了使用__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-choices

不确定如何设置我的模型以利用django-smart-choices来完成我正在尝试的内容。以下是我构建模型的方法:

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。我是否遗漏了一些东西,让智能选择在第二层抽象上工作?


编辑:上面的代码现在有效。

0 个答案:

没有答案